问题描述
我有一张图片列表.一个接一个.我正在尝试捕获单击的图像,填充模式div并显示它.
I have a list of images. One next to the other. I'm trying to capture which image was clicked, populate a modal div and show it.
标记
<section class="portfolio-grid column small-12" ng-controller="PortfolioCtrl">
<ul class="small-block-grid-2 medium-block-grid-4">
<li ng-repeat="portfolio in portfolios">
<a ng-click="showModal($index)" title="">
<img ng-src="{{portfolio.thumb}}" alt="">
<div class="details">
<h4>{{portfolio.name}}</h4>
</div>
</a>
</li>
</ul>
</section>
======== Some Other HTML ========
<div class="popup" ng-controller="ModalCtrl">{{info}}</div>
首先显示{"name":"Test"}
,没关系.单击后,即使我相信单击时仍在更改服务内部的变量,它也不会更新.
At first it shows {"name":"Test"}
, which is alright. After I click it does not get updated even though I believe I am changing the variable inside the service when I click.
控制器
app.controller("PortfolioCtrl", function($scope, $rootScope, PortfolioService, ModalService){
$scope.portfolios = PortfolioService.list();
$scope.showModal = function(index){
ModalService.setInfo($scope.portfolios[index]);
}
});
app.controller("ModalCtrl", function($scope, ModalService){
$scope.info = ModalService.getInfo();
});
服务
app.service('ModalService', function(){
var modalInfo = {"name":"test"};
this.setInfo = function(data){
modalInfo = data;
};
this.getInfo = function(){
return modalInfo;
};
});
app.service('PortfolioService', function(){
var portfolios = [
{"name":"Project Name 1", "thumb":"http://placehold.it/480&text=1", "bigImg":"http://placehold.it/1000x500&text=1", "description":"Description text 1", "linkToLive": "#"},
{"name":"Project Name 2", "thumb":"http://placehold.it/480&text=2", "bigImg":"http://placehold.it/1000x500&text=2", "description":"Description text 2", "linkToLive": "#"},
]
this.list = function(){
return portfolios;
}
});
推荐答案
在DOM中遇到模态时,您的ModalCtrl
控制器函数仅被调用一次.这意味着$scope.info
设置为ModalService.getInfo()
返回的初始值,并且从不更改.
Your ModalCtrl
controller function is only called once, when the modal is encountered into the DOM. This means that $scope.info
is set to the initial value returned by ModalService.getInfo()
and never changed.
您可以监视getInfo返回的值的更改:
You could watch for changes of the value returned by getInfo:
app.controller("ModalCtrl", function($scope, ModalService){
$scope.$watch(function() { return ModalService.getInfo(); }, function(){
$scope.info = ModalService.getInfo();
});
});
这篇关于AngularJS更新服务变量不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!