gridBlocks をレンダリングするリピーターがあります。これらの各ブロックには、「良い投票」、「悪い投票」 、または「投票しない」のプロパティがあります (ここでの目的のため)。このプロパティは、とりわけ、ブロックの CSS クラスを制御します。
userService
ユーザー投票のデータ構造は、投票を更新したり、ajax 呼び出しを実行したりするためのメソッドを公開する を介してアクセスされます。
私の問題はこれです:
voteClass
への呼び出しを介して、特定の各ブロックのスコープでプロパティを設定していますuserService
。このプロパティを監視し、モデルが変更されたときにそれに応じて UI を更新したいと思います。
ただし、これは機能していないようです -の値が実際に変更されても、 はvoteClass
再評価されず、呼び出されません。$watch
getVoteClass(scope.block.id)
を使用してみまし$apply
たが、何も変わらないようです。
ご意見をお寄せいただければ幸いです...
Update1getVoteClass(scope.block.id)
:値が変わっても、ブロック スコープ プロパティは変わらないと思います。ブロック スコープにそのプロパティを強制的に再評価させる方法はありますか?
更新 2 - 問題解決:この質問 に関する CaioToOn と Gloopy の助けを借りて、スコープ プロパティがプリミティブ文字列を参照していたという事実に問題があることに気付きました。これを克服するには、関数を監視するか、(プリミティブ文字列ではなく) オブジェクト プロパティへの直接参照を使用します。
コントローラ:
var gridController=['$scope', "userService", function($scope, userService) {
$http.get(url).success(function(data) {
$scope.blocks = data;
});
$scope.getLookVoteStatus = userService.getLookVoteStatus
}];
指令:
.directive('gridBlock', function() {
return {
link: function(scope, element, attrs) {
scope.voteClass=getVoteClass(scope.block.id);
scope.$watch('voteClass',function(newValue, oldValue) {
element.addClass(newValue);
});
}
}
});