0

同じコントローラーを使用する 2 つのモーダルがあります。1つは次のとおりです。

    <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>

もう1つは次のとおりです。

<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

スコーピングの仕組みを理解していないようです。これは、2 つの異なるコントローラーが異なるスコープと内容を持っていることを示す plunkr です。

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

明らかにわかるように、2 つのコントローラーが同じ変数を更新することを期待しても機能しません。それぞれのコントローラーが独自の独立したスコープ内に変数を持っているからです。これと戦うためにできることは、一部のプロパティの変更をリッスンする pubsub サービスを実装するか、エミットおよびブロードキャストの角度関数を使用するか、アプリで同じコントローラーが 2 回必要になる理由を再考して再設計することです。

于 2013-10-01T14:18:09.693 に答える