我對AngularJS相當陌生,所以我仍然在爲我的JQuery和原生JavaScript思維方式而苦苦掙扎。在指令和控制器之間共享數據的正確方法是什麼
我有一個應用程序,我有3個控制器和一個自定義指令,我希望指令通知另一個控制器,而不是它自己的父級來獲取一些數據。
我想出了一個解決方案,其中有一個包含數據的變量,一個getter和setter函數以及一個變量,我在控制器中切換並在何時更新。
myApp.service('sharedService', function() {
this.update = false;
this.data = [];
this.toggleUpdate = function(){
if(this.update === false){
this.update = true;
}
else {
this.update = false;
}
};
this.getData = function() {
return this.data;
};
this.setData = function(value) {
this.data = value;
};
});
在我的指導,我只是叫sharedService.toggleUpdate();當我想要控制器從資源中獲取新數據時。然後,我的控制器使用$ scope。$ watch來監視我的服務中更新的更改。
myApp.controller('PlanController', ['$scope', 'sharedService', function($scope, sharedService){
$scope.init = function(){
//fetch data from API
}
//watch for toogling the new data
$scope.$watch(function() {
return sharedProps.update;
}, function(newVal, oldVal) {
$scope.init();
}, true);
});
我希望你得到的圖片 - 這是一個正確的方式做到這一點,或者我錯過了一些更簡單的方法呢?
我認爲你正在尋找的是一個代碼審查,這是另一節在stackoverflow(糾正我,如果我錯了)。要回答你的問題,是的,服務是在你的應用程序之間共享功能的好方法。另一種方法是使用'$ emit/$ broadcast',當我想要在幾個控制器中同步發生不同的動作時,我會使用'$ emit/$ broadcast'。 '$ watch'是一個昂貴的方法,但我試圖找到另一種方式來做到這一點($廣播將做)。我的2美分.. –
嘿亞歷克斯C我不完全尋找代碼審查。我只想知道如何以正確的方式進行通知。我認爲你的想法適合我。你可以請發表一個答案,所以我可以接受它! –