0

私は typescript でかなり新しいので、 typescriptクラスを使用して記述されたAngular.jsディレクティブを作成しようとしています。 $watch関数がデータを受信したときに呼び出されるディレクティブリンク関数で外部角度サービスを使用したいと考えています。しかし、どのように試しても、このキーワードは常にグローバル ウィンドウにリンクしており、挿入されたサービスにアクセスできません。手伝ってください。これが私の指示です:

module Portal.MainMenu {
    class MenuScrollDirective implements ng.IDirective {
        static $inject = ["$timeout", "$window"];

        constructor(private $timeout: ng.ITimeoutService, private $window: ng.IWindowService) { } 
        restrict = "EA";
        scope = {
            expanded: "=",
            tplChanged: "=",
            fullView: "="
        };
        link = ($scope: ng.IScope, el: IJQSlimScroll) => {
            var settings = {
                position: 'left',
                size: '5px'
            };

            init();

            function init() {
                $scope.$watch('expanded',(cur, prev) => {
                    cur && adjustScroll();
                });
            }

            function adjustScroll() {
                var winH = this.$window.innerHeight //this - refers to Window here 
                                                   //but I need to access service

                this.$timeout(() => {
                    //need access to el here
                }); //same here 'this' is global 
            }
    }

    angular.module('portal.mainMenu')
           .directive('menuScroll', ($timeout: ng.ITimeoutService, $window: ng.IWindowService) => {
                return new MenuScrollDirective($timeout, $window);
            });
}
4

2 に答える 2

0

ディレクティブ リンク関数は、controller/ctrl を 3 番目のパラメーターとして、attributes/attrs を 4 番目のパラメーターとして持ちます。

サンプル リンク関数は次のようになります。

link = ($scope: angular.IScope, el: angular.IAugmentedJQuery, ctrl: Function, attrs: angular.IAttributes).

コントローラー参照を使用してコントローラー関数を呼び出し、そこから操作に必要な角度サービス関数を直接呼び出すことができます。

よろしく

アジェイ

于 2016-04-05T11:25:41.653 に答える