2017-07-14 59 views
0

我有一個導航欄控制器,我有一個搜索欄來搜索書籍。在我的navbar ui-router狀態下,我解決了書籍並將其設置在Books服務中。因此,我可以訪問所有的書籍。這不僅僅是在導航欄中,而是從所有控制器開始。Angularjs:跨多個控制器設置可訪問的服務

但是,在我的摘要儀表板中,我想列出所有已拉出的書。我不想重複撥打書籍的電話,而是想使用Books服務。如果我在摘要儀表板啓動應用程序,則會遇到問題,因爲摘要儀表板不知道如何等待從導航欄填充Books服務。

我的問題是如何使彙總儀表板等待導航欄控制器來解決圖書服務?

回答

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

@Marc如果我的答案奏效,請將此接受答案 – Ero

+0

我明白你的答案,但現在正在研究如何應用它。問題是我試圖向服務進行廣播。看起來這是因爲服務並不是真正的範圍。似乎重複性地將導航欄信息存儲在服務中,但是然後將摘要書從廣播(而不是服務)中取出。 本質上,我試圖讓導航欄(獲取書籍) - >書籍服務(商店書籍) - >摘要(從服務中獲取書籍) – Marc

+0

爲什麼你會播放該服務?就我個人而言,我會建議從後端拉書列表....反正你也可以這樣做:在加載時將書籍保存到導航欄中的書籍服務,然後廣播事件'booksLoaded',然後在總結儀表板中監聽該事件並從服務中加載書籍,而不是通過廣播傳遞它們 – Ero