我同时有一个带有两个控制器的页面布局,一个将数据显示为一种侧面导航,基于存储在浏览器本地存储中的数据和至少一个绑定到路由和视图的其他控制器。
我在下面创建了这个小线框图形,它显示了页面布局:
第二个控制器用于操作本地存储的数据并执行添加新项目或删除现有项目等操作。我的目标是保持数据同步,如果一个项目被“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;
});
});