0

modelディレクティブのコントローラーに設定されたサービスの属性を持つビュー テンプレートがあります。サービスの属性が更新されても、ビューでは更新されません。

<ul>
 <li ng-repeat="i in x">
   <item model=i></item>
 </li>

app.directive('x', function($http, MyService){
    return {
        restrict: 'E',
        replace: true,
        templateUrl: "partials/list.html",
        controller: function($scope, MyService){
            $scope.x = MyService.x;
        }
    }
});

モデルに変更を反映させる唯一の方法は、ディレクティブのコントローラーでサービスに属性を更新させることですが、コントローラーが呼び出された時点ではまだデータがありません。

何をすべきか?どういうわけか、ディレクティブのコントローラーを明示的に呼び出す必要がありますか、それともそのコントローラーにあるロジックを壊す必要がありますか? どちらも非常に角張っているようには見えません。

パズルの一部が欠けていますね。リテラルではなく参照であるかのように$scope.x更新するにはどうすればよいですか?MyService.x

4

1 に答える 1

1

との両方が、常に同じ配列を指す必要が$scope.xあります。MyService.x最善の方法は、サービスで一度配列を初期化すること[]です。

その後は常に、配列に要素を追加pushおよびslice削除する操作を行います。

この問題は、バインディングが別のアレイに設定されていて、サービスが別のアレイを指している場合に発生する可能性があります。

于 2013-09-16T13:32:43.640 に答える