我有一个指令,它可以在同一个父控制器中创建许多实例。指令使用隔离范围,其中一些属性取自父范围。其中一个指令属性可以是回调函数,当指令内部模型发生更改时,该函数将从指令调用。如果回调函数也将改变来自父范围的模型,该范围也被分配给指令I的其他实例,从而失去了"连接"在此范围内的父范围和指令之间。
app.controller('MainCtrl', function($scope) {
$scope.manualItem = { };
$scope.manualItem.FirstInstanceModel = "FirstInstance";
$scope.manualItem.SecondInstanceModel = "SecondInstance";
$scope.callbackTest = function(newValue){
$scope.manualItem.SecondInstanceModel = newValue;
};
});
指令:
app.directive("multiInstanceControl", [function(){
return {
restrict: "A",
scope: {
dataModel: "=ngModel",
dataChangeCallback: "=multiInstanceControlCallback"
},
templateUrl: "multiInstanceControlTemplate.html",
link: function($scope, $element, attr){
$scope.internalModel = Math.floor(Math.random() * 1000000).toString();//random number generation
$scope.updateModel = function(){
$scope.dataModel = $scope.internalModel
};
}
}
}]);
和标记:
<div
multi-instance-control
ng-model="manualItem.FirstInstanceModel"
multi-instance-control-callback="callbackTest(manualItem.FirstInstanceModel)" >
</div>
<div
multi-instance-control
ng-model="manualItem.SecondInstanceModel">
</div>
以下是Plunker exmple:
在第一个输入中是当您更改自己的值时定义的回调。回调函数正在改变模型绑定到指令的第二个实例,这在我的情况下很好。但是当您开始键入第二个输入字段时,模型不会传播到父范围。
问题是由JS原型继承模型引起的,但我需要知道什么是分享&#34;分享&#34;范围之间的对象,以及在父范围中重新分配对象时处理的情况。我使用的是角1.5。