2015-03-02 59 views
1

我正在編寫一個應用程序,該應用程序在多個位置使用具有相同數據的同一個表。我創建了一個自定義指令,允許我重用此表。不幸的是,如果我在一個實例中編輯表,另一個實例不刷新。我如何鏈接這兩個,以便我對其中的任何編輯都顯示在另一箇中?AngularJS:在同一指令的多個實例之間共享範圍

+0

你是如何表數據傳遞到指令? – James 2015-03-02 17:44:28

+0

我有一個服務,使我的Django REST後端的AJAX調用。該應用程序是一個媒體管理應用程序,它具有圖像和視頻選項卡,以及幻燈片選項卡。由於用戶可以使用現有媒體創建幻燈片,因此「圖像」和「視頻」選項卡具有自己的表格,這些表格在「幻燈片」選項卡中被複制。我認爲問題是這些表的幻燈片實例嵌套在幻燈片控制器中。如果我製作一個使用指令的測試選項卡,它將與主圖像選項卡保持同步,但幻燈片實例不會。 – Jacob 2015-03-02 17:53:48

回答

2

這聽起來像你主要想到它,困難的部分是讓你的數據變成一個形狀,其中的幻燈片可以共享視頻和照片。我建議在由Angular中的單獨工廠返回的共享數據訪問對象中執行此操作,而不是直接在範圍內執行此操作。如果有幫助,我有sample in Plunkr

該示例具有綁定到共享數據的指令,作爲注入到兩個單獨作用域中的對象從工廠檢索。在你的情況下,你將不得不添加方法來從服務器檢索數據,並對其進行整形以供顯示。

testApp.factory("News", [function() { 
    var news = { 
    "stories": [ 
     {"date": new Date("2015-03-01"), "title": "Stuff happened"}, 
     {"date": new Date("2015-02-28"), "title": "Bad weather coming"}, 
     {"date": new Date("2015-02-27"), "title": "Dog bites man"} 
    ], 
    "addStory": function (title) { 
     var story = { 
     "date": new Date(), 
     "title": title 
     }; 
     news.stories.push(story); 
    } 
    }; 
    return news; 
}]); 

兩個控制器引用同一個工廠中的數據:然後

testApp.controller("FirstController", 
    ["$scope", "News", function ($scope, news) { 
    $scope.news = news; 
}]); 

testApp.controller("SecondController", 
    ["$scope", "News", function ($scope, news) { 
    $scope.news = news; 
}]); 

視圖中的數據傳遞到新聞列表指令,這兩個共享的數據,並保持相對指令啞。

<div ng-controller="FirstController"> 
    <news-list news="news" title="'First List'"></news-list> 
    </div> 
    <div ng-controller="SecondController"> 
    <news-list news="news" title="'Second List'"></news-list> 
    </div> 

新聞列表指令是在這個例子只是愚蠢的格式:

testApp.directive("newsList", 
    function() { 
    var directive = { 
     "restrict": "E", 
     "replace": false, 
     "templateUrl": "news-list.html", 
     "scope": { 
     "news": "=news", 
     "title": "=title" 
     } 
    }; 
    return directive; 
}); 

查看模板:

<div class="news-list"> 
    <p>{{title}}</p> 
    <ul> 
    <li ng-repeat="story in news.stories | orderBy:'date':true">{{story.date | date:'short'}}: {{story.title}}</li> 
    </ul> 
    <form> 
    <input type="text" id="newTitle" ng-model="newTitle" /> 
    <button ng-click="news.addStory(newTitle)">Add</button> 
    </form> 
</div> 
+0

非常感謝您花時間添加所有這些!我有一個非常類似的設置,雖然我使用的是服務而不是工廠,但不知道這是否有所作爲。當我這樣設置時,兩個未經控制的控制器,一切都完美無缺。我遇到的問題是,當我有一個只由圖像控制器控制的選項卡時,另一個則由圖像控制器控制,但嵌套在由幻燈片控制器控制的選項卡中。 可視化層次結構: 選項卡1:圖像控制器 選項卡2:幻燈片控制器>子選單 - >圖像控制器。 – Jacob 2015-03-02 19:42:48

+0

你是否將相同的數據對象傳遞給兩個指令?如果控制器嵌套,它應該一樣容易。重要的是,這些指令使用相同的數據,而不是從兩個不同的控制器加載的分開但相同的數據。 – James 2015-03-02 19:48:47

+0

我認爲可能就是這樣。我絕對試圖這樣做,但不知道我是否成功。幻燈片和圖像控制器採用圖像服務,並將$ scope.imageList設置爲服務中getImages函數的結果。我試過不從幻燈片控制器調用getImage函數,但它似乎沒有改變任何東西。他們最初加載相同的數據,但我認爲它是兩個獨立但平等的數據對象。在上面給出的例子中,同樣的想法會如何發揮作用?並且通過服務使用工廠會改變什麼? – Jacob 2015-03-02 19:59:30

相關問題