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

所以有人会期望我的第一个视图会在下拉列表中有更新的“播放列表”,但事实并非如此。那么如何才能更新该视图呢?

4

1 回答 1

1

您似乎不了解范围界定的工作原理。这是一个 plunkr,说明两个不同的控制器具有不同的范围和内容。

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

正如您可以清楚地看到的那样,期望两个控制器更新同一个变量是行不通的,因为它们每个都在自己的隔离范围内拥有变量。你可以做的就是实现一个 pubsub 服务来监听某些属性的一些变化,使用发射和广播角度函数,或者,最好,重新考虑为什么在你的应用程序中需要两次相同的控制器并重新设计它。

于 2013-10-01T14:18:09.693 回答