私は隔離された範囲で指示を持っています。私は、ディレクティブのコントローラの親コントローラから渡された変数のうちの1つを修正しています。私が実行している問題は、同じディレクティブ(異なるoptions
とmodel
)の複数のインスタンスを同じビューで使用すると、options
オブジェクトはディレクティブの各インスタンスに固有のままではないということです。代わりに、それは共有変数になり、ディレクティブのすべてのインスタンスは同じoptions
オブジェクトを使用します。だから、ディレクティブを変更する方法コントローラ内の分離スコープ変数を、それを分離したままで変更しますか?
私はoptionsA.isFlagOn = true
とoptionsB.isFlagOn = false
<my-directive model="modelA" options="optionsA">
<my-directive model="modelB" options="optionsB">
optionsA
とmodelB
負荷の指令に、以下のように私の見解では、それらを使用した場合。
特定のインスタンスごとにoptions
を変更する際に、どうすればよいですか?
angular.module('myModule', [])
.directive('myDirective', function($compile) {
template = '<h3><span ng-bind="model.title"><h3><p><span ng-bind="options"></span></p>';
return {
restrict: 'AE',
scope: {
model: "=",
options: "=?" //A JSON object
},
controller: function($scope) {
$scope.options = $scope.options || {};
//A function that sets default values if no options object passed
ensureDefaultOptions($scope);
//now based on some of the options passed in, I modify a property in the options object
if ($scope.options.isFlagOn)
$scope.options.thisProp = true;
},
link: function(scope, element, attr) {
let content = $compile(template)(scope);
element.append(content);
}
};
}
編集:私は私の問題を解決しました。私の解決策は以下の答えに掲載されています。
私はそれが動作するとは思わない。ディレクティブのスコープをねじ込む2方向の拘束ではありません。ディレクティブのすべてのインスタンスで共有されているディレクティブコントローラの分離スコープ変数を変更しているため、問題が発生していると思われます。 –
OICの場合、私はあなたの指令コントローラに$ scopeを注入したくないと思います。 scope.optionsは分離スコープを参照する必要があります。 –
IOW、$ scope.options = $ scope.optionsはおそらくangular.extend(scope.options、$ scope.options)です。 –