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的文檔對我的理解水平太複雜了。
複雜,我建議您發佈的HTML。如果您的視圖沒有更新,那麼您可能有一個綁定問題。 – pixelbits
添加HTML,謝謝。我認爲這不是一個綁定問題,因爲在控制檯中,我可以看到ng-show = true,視圖不會更新... xD – Pieroit
它*是一個綁定問題。您的視圖綁定到多個控制器上的不同範圍變量:{{player}}和{{show}}。由於它們是不同的範圍變量,因此它們之間不存在任何綁定,因此您不應期望它們同步更新其視圖。 – pixelbits