我想知道使用哪種模式,如果我需要我的服務在控制器,指令等之間共享動態數據。我提到動態的原因是因爲我' d需要加載新數據,並且此數據需要在任何其他控制器,指令等中可用。例如,如果指令生成UL LI,則如果服務內部的數據已更改,則它必須重新生成它!如何在控制器和指令之間共享服務動態數據
我最初打開了以下內容(How to create reset() method in Service that return promise?),有人指出我應該使用觀察者模式。這我很感激,我很快就寫了這是什麼,我需要做的,尖峯意見將非常感謝(http://jsbin.com/epAMaP/1)
var MyApp = angular.module('MyApp', []);
MyApp.config(function($locationProvider){
$locationProvider.hashPrefix('!');
});
MyApp.factory('MyService', function($timeout){
var data;
var loadData = function(){
data = {
foo: "bar",
time: new Date()
};
return data;
};
return {
refresh: function(){
loadData();
},
getData: function(){
return loadData();
}
};
});
MyApp.controller('MyCtrl', function($scope,MyService,$timeout){
$scope.foo = "Service share data";
$scope.data = MyService.getData();
$scope.$on("eventFoo", function(){
console.log("Data has changed!");
console.log($scope.data);
});
$timeout(function(){
MyService.refresh();
$scope.$apply(function(){
$scope.data = MyService.getData();
$scope.$emit("eventFoo");
});
}, 3000);
});
MyApp.directive('myDirective', function(MyService,$timeout){
return {
restrict: 'A',
link: function(scope, elem, attrs){
scope.$on("eventFoo", function(){
console.log("Event foo triggered!");
scope.data = MyService.getData();
console.log(scope.data);
});
}
};
});
我認爲這將解決我的大部分問題,但有件事情,我需要記住。我將加載的數據來自$ http GET,所以我認爲每次需要更新或加載數據時都需要使用至少一個承諾,然後觸發正確的事件。
我對AngularJs的經驗不足導致我質疑自己的想法,因此非常感謝任何幫助或建議!
感謝您的期待!