2014-12-06 49 views
0

我的自定義指令長相一般是這樣的:指令中總是需要額外的觀察者嗎?

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

回答

0

當您將對象傳遞給帶有「data」屬性的指令時,您不應該這樣做。你有沒有可能將一個原始值傳遞給指令(String,int等)?

在這種情況下,指令中的範圍以原始值的副本結束,並且在指令外進行的更改不會影響指令範圍內的副本。

要解決此問題,使用一個包裝對象像

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

,然後傳遞到指令。當它通過一個對象時,引用,當您更改同一個對象時,外部所做的更改將反映在指令內。