0

基本的に私のコントローラでは、$http.get()HTMLをロードして「現在のビュー」を設定しています。私の問題は、この新しい動的コンテンツで jQuery イベントを再バインドする方法がわからないことです。

今、私は次のようなものに頼っています:

$http.get('/someurl', {}).success(function(data){
  $scope.detailedView = data;
  // Now here comes the rebinding
  setTimeout(function(){
    // Use jquery to bind the new content
  }, 1500);
});

私は解決策を探していましたが、私が見つけた関連するものはすべて、ディレクティブの使用を示しています。私はこれを調べましたが、ディレクティブがこのようなものにどのように使用されるかわかりません。

タイムアウトがない場合、動的コンテンツが実際に DOM に配置される前にバインディングが実行されることに注意してください。また、 $apply が実行された後に何かにフックするのに似たものを見つけようとしましたが、似たようなものは見つかりませんでした。

4

1 に答える 1

2

最初に、jQuery で行っていることが angular では実行できないかどうかを確認する必要があります。

使用できるディレクティブの最も単純なバージョンを次に示します。

<div ng-repeat="item in items" my-directive>Item {{$index+1}}</div>
app.directive('myDirective', function ($timeout) {
    return function (scope, element, attrs) {
        $timeout(function () {
            /* element is a jQuery object when jQuery loaded in page before angular,*/
            /* otherwise is a jQlite object that has many of same methods as jQuery*/
            element.css({ 'border': '1px solid green', 'margin': '10px 30px','padding':'5px'});
        }, 0);
    }
 });

長いタイムアウトを使用して、ディレクティブを使用する繰り返し項目のデータを生成するデモを次に示します。

http://jsfiddle.net/AXYGL/

于 2013-04-08T23:31:33.243 に答える