指令中总是需要额外的观察者吗?

指令中总是需要额外的观察者吗?

问题描述:

我的自定义指令长相一般是这样的:指令中总是需要额外的观察者吗?

App.directive('myDir',function() { 
    return { 
     scope: {data:"="}, 
     link: function(scope) { 
      scope.model={ 
       data:scope.data 
      }; 
      scope.$watch('data', function() { 
       scope.model.data = scope.data; 
      }); 
     } 
    } 
}); 

我必须定义手表拷贝改变(外指令)data到面向对象的model。 有没有其他办法?我是否应该总是为该任务定义额外的观察者?

+1

你没有说清楚为什么你需要将'.data'复制到'.model.data'。你可以使用'.data'。 – hon2a 2014-12-06 12:03:31

当您将对象传递给带有“data”属性的指令时,您不应该这样做。你有没有可能将一个原始值传递给指令(String,int等)?

在这种情况下,指令中的范围以原始值的副本结束,并且在指令外进行的更改不会影响指令范围内的副本。

要解决此问题,使用一个包装对象像

$scope.data = { 
    val: "foo" 
}; 

,然后传递到指令。当它通过一个对象时,引用,当您更改同一个对象时,外部所做的更改将反映在指令内。