2013-10-01 82 views
0

我有2個使用相同控制器的模態。其中有:角度視圖不從模型更改更新

<div id="addToPlaylist" ng-controller="PlaylistModalCtrl"> 
        <select name="playlist" ng-model="playlist" ng-options="playlist.id as playlist.name|rmExt for playlist in playlists"> 
        </select> 

其他有:

<div id="newPlaylist" ng-controller="PlaylistModalCtrl"> 
<button ng-click="createPlaylist(playlistName);">Save</button> 

在我的控制,我有:

angular.module('MyApp') 
    .controller('PlaylistModalCtrl', function ($scope) { 
    $scope.playlists = []; 

    $scope.updatePlaylists = function() { 
     getPlaylist.then(function (response) { 
     $scope.playlists = response.data.data; 
     $scope.$$phase || $scope.$apply(); 
     });  
    } 

    $scope.createPlaylist = function(playlist_name) { 
     addPlaylist(playlist_name).then(function(response) { 
     $("#newPlaylist").modal('hide'); 
     }); 
    } 

    $scope.updatePlaylists(); 
    }); 

所以人們會認爲我的第一個觀點將有一個更新的 「播放列表」在下拉菜單中,但情況並非如此。那麼我怎樣才能讓這個觀點得到更新呢?

+0

在html中我看到'ng-model =「playlist」',但在js中我看到'$ scope.playlists',錯字? –

+0

什麼是getPl? – Ven

+0

'getPl'是一個服務調用來獲取最新的播放列表。 @YeLiu,我更新了我的代碼以反映播放列表 – Shamoon

回答

1

你似乎不明白範圍的工作原理。這是一個說明兩個不同的控制器有不同範圍和東西的plunkr。

http://plnkr.co/edit/LqLuLvVkE9ltzcJH6XdN?p=preview

正如你可以清楚地看到,希望兩個控制器更新相同的變量是行不通的,因爲他們每個人都有其自己獨立的範圍變量。你可以做的就是實現一個pubsub服務,它監聽某些屬性的一些變化,使用發射和廣播角函數,或者最好的,重新思考爲什麼你的應用需要兩次相同的控制器並重新設計它。