我有一個頁面佈局與兩個控制器在同一時間,一個擁有的數據顯示爲一種側面導航,基於數據存儲瀏覽器本地存儲和至少一個其他控制器,它綁定到一個路由和視圖。這是保持兩個控制器之間數據同步的好方法嗎?
低於該我創建這個小線框圖形顯示頁面佈局:
第二控制器被用於操縱所述本地存儲的數據和類似的加入新的項目或刪除執行動作的現有一。我的目標是保持數據同步,如果通過'ManageListCrtl'添加或刪除項目,使用'ListCtrl'的側面導航應該立即更新。
我將本地存儲邏輯分離成一個服務,該服務在列表被操縱時執行廣播,每個控制器監聽此事件並更新範圍列表。
這工作正常,但我不確定是否有最佳做法。
這是一個只包含必要的部分代碼的我一個精簡版:
angular.module('StoredListExample', ['LocalObjectStorage'])
.service('StoredList', function ($rootScope, LocalObjectStorage) {
this.add = function (url, title) {
// local storage add logic
$rootScope.$broadcast('StoredList', list);
};
this.delete = function (id) {
// local storage delete logic
$rootScope.$broadcast('StoredList', list);
};
this.get = function() {
// local storage get logic
};
});
angular.module('StoredListExample')
.controller('ListCtrl', function ($scope, StoredList) {
$scope.list = StoredList.get();
$scope.$on('StoredList', function (event, data) {
$scope.list = data;
});
});
angular.module('StoredListExample')
.controller('ManageListCtrl', function ($scope, $location, StoredList) {
$scope.list = StoredList.get();
$scope.add = function() {
StoredList.add($scope.url, $scope.title);
$location.path('/manage');
};
$scope.delete = function (id) {
StoredList.delete(id);
};
$scope.$on('StoredList', function (event, data) {
$scope.list = data;
});
});