我想在我的角度应用程序中更新两个视图,这两个视图都有自己的控制器。
我有一家工厂:
angular.module('starter')
.factory('userFactory', function(DSCacheFactory){
var user = DSCacheFactory.get("userData").get("user");
if(user === undefined){
return false
}else{
var name, email
return {
name:user.name,
email: user.userName
}
}
});
因此,当用户未登录时,该值为false。但是当用户登录时,会显示其用户名和名称。我遇到的问题是,当我刷新页面时,视图会更新,我可以看到用户已登录,但我不想刷新页面,我希望不同控制器上的两个视图立即更新。
向正确的方向推进?如果您需要我详细说明,请直接询问
谢谢
答案 0 :(得分:0)
这可以通过$ watch实现。也许您应该重新组织代码,这样您就不需要手表了。这使得
app.controller('myCtrl', ['userFactory', function(userFactory) {
$scope.$watch(
function( $scope ) { return userFactory },
function( user) {
if (!user) console.log('login please');
else console.log(user);
}
);
}]);
希望它有所帮助!答案 1 :(得分:0)
另一个想法。您可以在多个控制器上使用“appmodel”服务共享数据。
控制器:
angular.module('myApp.controllers', [])
.controller('ACtrl', ['$scope', 'appmodel', 'loginservice', function($scope, appmodel, loginservice) {
$scope.User = appmodel.User;
$scope.login = loginservice.login;
}])
.controller('BCtrl', ['$scope', 'appmodel', function($scope, appmodel) {
$scope.User = appmodel.User;
}])
appmodel:
myApp.service('appmodel', [function(){
var self = this;
self.User = {};
self.User.name = '';
}]);
登录操作:
myApp.service('loginservice', ['appmodel', 'userFactory', function(appmodel, userFactory){
var self = this;
self.login = function() {
var user = userFactory;
if (user !== false)
{
appmodel.User.name = user.name;
appmodel.User.email = user.email;
}
}
}]);
更多细节:Full Demo