我的网络应用依赖于在整个用户访问期间更改的一个特定变量。它控制用户在任何给定时间看到的数据,基本上类似于TAG。
如果$scope.tagid = 1
,当tagid更改为$ scop.tagid = 2时,是否可以使用另一个角度模型立即更新自己的数据集?
<script >
function PageCtrl($scope) {
$scope.text = '<?=$tagid?>';
}
$scope.showThread = function(tagid) {
$http({method: 'GET', url: 'api/example/thread/id/' + tagid}).
success(function(data, status, headers, config) {
$scope.appDetail = data; //set view model
$scope.view = './Partials/detail.html'; //set to detail view
}).
error(function(data, status, headers, config) {
$scope.appDetail = data || "Request failed";
$scope.status = status;
$scope.view = './Partials/detail.html';
});
}
</script>
<div ng-controller="PageCtrl">
<input ng-model='text' />
<ul>
<li >
<span>{{text}}</span>
</li>
</ul>
</div>
以上是我要做的事情的骨架。
我意识到,如果我想,我可以在每次用户操作后调用showThread()并更新数据...但是,由于我想要设置网站,所以只更有意义更改tagid,然后让其他所有内容立即更新,而不是选择并选择我想要更新的网站的每个部分。也就是说,除了showThread()之外,还有updateHeader(),changeSidebar()等。
谢谢!
答案 0 :(得分:1)
我个人使用服务取得了成功; **假设您在1页上使用2个控制器,我会创建一个这样的服务:
MyApp.app.service("tagDataSvc", function () {
var _tagId = {};
return {
getTagId: function () {
return _tagId;
},
setTagId: function (value) {
_tagId = value;
}
};
});
接下来,将此服务注入将使用此服务的控制器中。
在您控制TagId(PageCtrl)的主控制器中,您需要通过调用服务来设置共享tagId值:tagDataSvc.setTagId($scope.text)
您可以明确地执行此操作,或者添加$ watch on $ scope.text,或者你喜欢的任何东西。
最后,在你想要自动更新的第二个控制器中,在这个服务的getTagId()函数上添加一个$ watch,如下所示:
$scope.$watch(function () { return tagDataSvc.getTagId(); }, function (newValue, oldValue) {
if (newValue != null) {
$scope.tagId2 = newValue;
//reload whatever needs updating here
}
}, true);