2014-06-19 33 views
0

我試圖讓兩個控制器通過Angularjs中的服務交流。 服務'playerFocus'在模型級別上工作正常,但視圖不會更新。我特別提到了ModalDialogController中的變量show,該變量正確地轉換爲true,但在視圖中保持爲false。下面是完整的JS:

(function(){ 

var players = [ 
    { 
     id: 1, 
     name: 'Charles Foley', 
     photo: 'images/gem-01.gif' 
    }, 
    { 
     id: 2, 
     name: 'Pippo', 
     photo: 'images/gem-02.gif' 
    }, 
    { 
     id: 3, 
     name: 'Roberto', 
     photo: 'images/gem-03.gif' 
    } 
]; 

var app = angular.module('soccer-match', []); 

app.service('playerFocus', function(){ 
    var subscriber = undefined; 

    this.sendMessage = function(mex){ 
     subscriber(mex); 
    }; 

    this.onMessage = function(callback){ 
     subscriber = callback; 
    }; 
}); 

app.controller('PlayersListController', ['$scope', 'playerFocus', function($scope, playerFocus){ 
    $scope.players = players; 

    $scope.playerDialog = function(p){ 
     playerFocus.sendMessage(p);   
    }; 
}]); 

app.controller('ModalDialogController', ['$scope', 'playerFocus', function($scope, playerFocus){ 

    $scope.player = undefined; 
    $scope.show = false; 

    $scope.focusPlayer = function(p) { 
     for(i in players){ 
      if(players[i].id == p){ // PROBLEM HERE 
       $scope.$apply(function(){ 
        $scope.player = players[i]; 
        $scope.show = true; 
       }); 
      } 
     } 
    }; 


    playerFocus.onMessage($scope.focusPlayer); // PROBLEM HERE 
}]); 

和HTML模板:

  <!-- players list --> 
     <div id="players-list" ng-controller="PlayersListController"> 
      <div ng-repeat="player in players"> 

       <!-- player --> 
       <div class="player">  
        <img class="player-thumb" ng-src="{{player.photo}}"}}> 
        <div class="player-info"> 
         <p>{{player.name}}</p> 
         <button ng-click="playerDialog(player.id)" type="button" class="btn btn-default player-info-btn">Info</button> 
        </div> 
       </div> 

      </div> 

      <!-- add player --> 
      <div class="player">  
       <img class="player-thumb" src="images/default.png"}}> 
       <div class="player-info"> 
        <p>- ??? -</p> 
        <button type="button" class="btn btn-success player-info-btn">Nuovo Giocatore</button> 
       </div> 
      </div> 

     </div> 

    </div> 

    <!-- player modal dialog --> 
    <div ng-controller="ModalDialogController"> 
     <div class="modal-dialog" ng-show="{{show}}"> 
      {{player}}{{show}} 
     </div> 
    </div> 

我尋找一個解決方案了整整一天,one是使用$申請強制模型和視圖的同步後服務回調,但我得到這error。我對此非常困惑,Angular的文檔對我的理解水平太複雜了。

+0

複雜,我建議您發佈的HTML。如果您的視圖沒有更新,那麼您可能有一個綁定問題。 – pixelbits

+0

添加HTML,謝謝。我認爲這不是一個綁定問題,因爲在控制檯中,我可以看到ng-show = true,視圖不會更新... xD – Pieroit

+0

它*是一個綁定問題。您的視圖綁定到多個控制器上的不同範圍變量:{{player}}和{{show}}。由於它們是不同的範圍變量,因此它們之間不存在任何綁定,因此您不應期望它們同步更新其視圖。 – pixelbits

回答

相關問題