1

私のディレクティブはスパンにフォーカスを与え、boolean値を割り当てます。つまり、shifttab を押すたびに focusToSpan を true に割り当てますが、この変更はコントローラーテンプレートに反映されません。以下のように focusToSpan 変数の $scope.$watch でチェックしました

指令

(function() {
    'use strict';
    angular.module("my.page").directive('getFocusToSpan', function() {
        return {
            link: function(scope, elem, attr, ctrl) {
                elem.bind("keydown keypress", function(event) {
                    if (event.which === 16) {
                        $('.iconclass').attr("tabIndex", -1).focus();
                        scope.focusToSpan = true;
                    }
                });
            }
        };

    });

})();

コントローラ

     $scope.$watch('focusToSpan', function(newValue) {
     if (angular.isDefined(newValue)) {

     alert(newValue);
     }
     });

ディレクティブでコントローラー変数に加​​えられた変更が、コントローラーとテンプレートにどのように反映されるかを知っていますか。ありがとう、バラジ。

4

1 に答える 1

1

角度コンテキストの外では、更新されないスコープ/バインディングを操作します。バインディングを更新するには、ダイジェスト サイクルを実行してすべてのスコープ レベルのバインディングを更新する必要があります。

ここでは、カスタム イベントから角度変数を更新しているため、スコープでメソッドscopeを実行してダイジェスト サイクルを手動で実行する必要があります。$apply()

コード

elem.bind("keydown keypress", function(event) {
    if (event.which === 16) {
       $('.iconclass').attr("tabIndex", -1).focus();
       scope.focusToSpan = true;
       scope.$apply();
    }
});
于 2015-08-16T18:53:22.383 に答える