Angularjs: set accessible service across multiple controllers
我有一个导航栏控制器,其中有一个搜索书籍的搜索栏。在我的导航栏 ui-router 状态下,我解析书籍并将其设置在 Books 服务中。结果,我可以访问所有书籍。这不仅在导航栏中,而且从那时起在所有控制器中。
但是,在我的摘要仪表板中,我想列出我已提取的所有书籍。我不想重新调用来拉书,而是想使用 Books 服务。如果我在摘要仪表板中启动应用程序,我会遇到问题,因为摘要仪表板不知道如何等待从导航栏填充图书服务。
我的问题是如何让摘要仪表板等待导航栏控制器解析图书服务?
您的导航栏可以广播一个事件,而您的摘要仪表板可以等待它。
导航栏控制器
1 | $scope.$broadcast('booksLoaded', books); |
摘要仪表板控制器
1 2 3 | $scope.$on('booksLoaded', function(event, books) { $scope.books = books; }); |
另一种选择是使用服务来临时存储数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | angular.module('app').factory('BooksService', BooksService); function BooksService() { return { getBooks: getBooks, setBooks: setBooks }; var _books = []; function getBooks() { return _books; } function setBooks(books) { _books = books; } } |