从多实例指令

时间:2016-09-06 16:50:14

标签: javascript angularjs

我有一个指令,它可以在同一个父控制器中创建许多实例。指令使用隔离范围,其中一些属性取自父范围。其中一个指令属性可以是回调函数,当指令内部模型发生更改时,该函数将从指令调用。如果回调函数也将改变来自父范围的模型,该范围也被分配给指令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。

1 个答案:

答案 0 :(得分:1)

  

我需要知道什么是最好的方式来分享&#34;范围之间的对象

使用服务在控制器之间共享数据。

Relevant question.