2013-10-01 46 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服务,它监听某些属性的一些变化,使用发射和广播角函数,或者最好的,重新思考为什么你的应用需要两次相同的控制器并重新设计它。