AngularJSを使用する。私は双方向のデータバインディングをしたいという指示があります。このディレクティブには、「activate」という属性があります。最初に、「有効化」の値は「1」になります。属性の変更
ディレクティブのリンク機能は、「有効化」が「1」に等しいかどうかをチェックします。もしそうなら、それは "活性化"を0に変えますが、他の何かをします。
後で、コントローラでもう一度指示をしたい場合は、再度「アクティブ化」を「1」に変更します。ディレクティブにはウォッチがあるため、サイクルが繰り返されます。
残念ながら、私はこれを行うたびに、「testDirective」のディレクティブで使用される「式 '0」が割り当てられません!または「割り当て不可能なモデル式:1(指示:testDirective)」を選択します。ここで
はHTMLです:
<body ng-app="app">
<test-directive activate="1"></test-directive>
</body>
ここ
はJSです:
var app = angular.module('app', []);
app.directive('testDirective', function() {
return {
restrict: 'E',
scope: {
activate : '='
},
link: function(scope, elem, attrs, controller) {
var el = elem[0];
var updateContent = function() {
el.innerText = 'Activate=' + scope.activate;
};
updateContent();
attrs.$observe('activate', function() {
console.log('Activate=' + scope.activate);
if(scope.activate == '1') {
scope.activate = '0'
updateContent();
}
});
}
}
});
ここでは、jsFiddleである:http://jsfiddle.net/justbn/mgSpY/3/
なぜ私はディレクティブの属性に格納されている値を変更することはできません。 ?私は2ウェイバインディングを使用しています。
ドキュメントでは、「親スコーププロパティが存在しない場合、NON_ASSIGNABLE_MODEL_EXPRESSION例外がスローされます。
注:更新内容に「有効化」の値が正しく表示されます。ただし、「」内の「有効化」の値は更新されません。
親スコープのプロパティが存在するので、それは私には意味がありません。
アイデア?スコープのプロパティを監視するために
dluz:私は働く解決策のためにMichaelに答えを与えました。しかし、私はあなたにそれを変更しました。あなたは私がそれをより良く理解できるようにそれを説明しました。本当にありがとう! – Justin
ジャスティン:喜んで助けてください! :) –
これは私の答えの一部でした。私はスコープを実行しなければなりませんでした。$ apply()を変更した後に$ watchがトリガーしませんでした。 – LucasBeef