Angularjs:跨多个控制器设置可访问的服务

时间:2017-07-14 18:55:26

标签: angularjs

我有一个导航栏控制器,我有一个搜索书籍的搜索栏。在我的navbar ui-router状态下,我解析了这些书并在Books服务中进行了设置。结果,我可以访问所有书籍。这不仅仅是在导航栏中,而是从那一点开始跨越所有控制器。

但是,在我的摘要信息中心中,我想列出我已经提取的所有图书。我想使用Books服务,而不是重做拉书的电话。如果我在摘要仪表板上启动应用程序,我遇到了问题,因为摘要仪表板不知道如何等待从导航栏填充Books服务。

我的问题是如何让摘要仪表板等待导航栏控制器解析图书服务?

1 个答案:

答案 0 :(得分:1)

您的导航栏可以广播一个事件,您的摘要信息中心可以等待它。

导航栏控制器

$scope.$broadcast('booksLoaded', books);

摘要仪表板控制器

$scope.$on('booksLoaded', function(event, books) {
    $scope.books = books;
});

另一种选择是使用服务临时存储数据。

angular.module('app').factory('BooksService', BooksService);

function BooksService() {
    return {
        getBooks: getBooks,
        setBooks: setBooks
    };

    var _books = [];

    function getBooks() {
        return _books;
    }

    function setBooks(books) {
       _books = books;
    }
}