2016-09-06 49 views
0

我有一个指令,可以在同一个父控制器中创建多个实例。指令使用独立作用域,并从父作用域中取得一些属性。其中一个指令属性可以是在指令内部模型更改时从指令调用的回调函数。如果回调函数也将改变也被分配给其他指令实例的来自父范围的模型,我将失去这个改变模型的父范围和指令之间的“连接”。什么是从多实例指令访问父范围对象的最佳方式

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原型继承模型引起的,但我需要知道什么是在作用域之间“共享”对象并在父作用域中重新分配对象时处理情况的最佳方式。我使用角1.5。

回答

1

我需要知道什么是范围使用服务之间

“共享”对象共享控制器之间的数据的最佳方式。

Relevant question.

相关问题