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

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;
    }
}