0

エレメント

<button ud-listener="item.status">{{item.value}}</button>

そして、私は次のディレクティブを持っています

myApp.directive('myDirective', function()
{
    return {
        restrict: 'A',
        link: function(scope, element, attrs)
        {
            scope.$watch(attrs.myDirective, function(val)
            {
                if(!isUndefined(val))
                {
                    element.addClass(val);
                    setTimeout(function(){
                        element.removeClass(val);
                    }, 2000);
                }
            });
        }
    }
});

私がやろうとしていることは次のとおりです。

socket-io で json 形式のデータを受信して​​おり、add/-removeClass に必要な値を保持する myDirective を監視しています。

最初は魅力のように機能し、ディレクティブはクラスを要素に追加し、2秒後に削除します。問題なく。しかし、数分後、すべての要素にクラスを追加するのではなく、それらのいくつかにのみクラスを追加します。

それを行う別の方法はありますか?要素にaddClassを追加し、2秒後にclassを削除したいだけです。

4

2 に答える 2

1

私はいくつかのことに気づきました:

1.setTimeoutの代わりに を使用してい$timeoutます。

これを行うと、Angular コンテキストの外部でコードを実行しているため、ダーティ チェックを実行することがわかりません。交換してみる

setTimeout(function(){
   element.removeClass(val);
 }, 2000);

$timeout(function(){
     element.removeClass(val);
}, 2000);

$timeoutまた、ディレクティブ ファクトリ メソッドへの引数として含める必要があります。

scope.$watch2.代わりに使用していますattrs.$observe

ここでの影響についてはよくわかりませんが、これは私が以前に行った方法です。

試す:

attrs.$observe('myDirective', function(val){
 ...
}
于 2013-10-08T16:36:29.993 に答える
1

ほとんどの場合、次のいずれかが原因です。

あなたはJQueryを参照していません...または...

JQuery 参照が角度参照の前に来ない

   <script src="/scripts/jquery.js" type="text/javascript"></script>
   <script src="/scripts/angular.js" type="text/javascript"></script>

読み込み中に Angular が JQuery を認識した場合elementは完全な JQuery オブジェクトになり、そうでない場合は jqLit​​e になります。

于 2012-12-07T14:29:45.573 に答える