AngularJS:将角度服务属性绑定到范围
AngularJS: Bind angular service property to scope
场景
- 我有一个维护用户(布尔(
sessionStatus
的服务UserService
。 - 视图有条件地在
ng-show=sessionStatus
上显示 [LOGOUT](即,如果未登录(假(,则不显示(。 - 因此,
ViewController
sessionStatus
应始终与UserService
相匹配......右? - 如果在 [LOGOUT] 可见时单击它,它会执行一些日志输出操作,
sessionStatus
值更改,并且视图应更新为新的ng-show...
结果。
问题
- 目前,单击注销似乎不会更新 var UserService.sessionStatus?
- 当 UserService.logout(( 发生并更改 UserService.sessionStatus 时,如何保持 $scope.sessionStatus 更新?
- 如何将变化$scope映射到 ng-show?
文件
视图
<a ng-show="sessionStatus" ng-click="logout()">Logout</a>
视图控制器
app.controller('AppController', function($scope, $interval, $http, UserService) {
$scope.logout = function() { UserService.logout(); }
// This ain't working
$scope.$watch(UserService.sessionStatus, function() {
$scope.sessionStatus = UserService.sessionStatus;
});
});
用户服务
注意:appUser 是 HTML 头中注入的全局变量(在我让会话/cookie 内容正常工作之前是一个黑客修复(
app.factory('UserService', function($http) {
var pre;
var sessionStatus;
function init() { // Logged in : Logged out
pre = appUser.user != undefined ? appUser.user : { name: 'Logged out', uid: '0' };
sessionStatus = pre.uid != "0" ? true : false;
}
function resetSession() { appUser = null; init(); }
init();
return {
sessionStatus: function() { return sessionStatus; }, // update on change!
logout: function() {
$http.get("/logout").then(function (data, status, headers, config) {
resetSession();
})
}
};
});
而不是watch
,只需使用从service
返回会话状态的作用域function
。
$scope.sessionStatus = function() {
return userService.sessionStatus();
};
您的注销链接如下所示:
<a ng-show="sessionStatus()" ng-click="logout()">Logout</a>
为您的功能精简的 Plunker:http://plnkr.co/edit/u9mjQvdsvuSYTKMEfUwR?p=preview
使用作用域函数更简洁,是执行此操作的"正确"方法。然而,为了完整起见,您也可以修复您的手表:
$scope.$watch(function () {
return UserService.sessionStatus;
}, function() {
$scope.sessionStatus = UserService.sessionStatus;
});
$watch方法的第一个参数采用 WatchExpression,该表达式可以是字符串或方法。
但同样,$watch不应在控制器中使用。按照建议使用作用域方法更简洁且更易于测试。
相关文章:
- IE8中的Ember.js(1.0pre)属性绑定错误
- LiveCycle Xml属性绑定
- angular2中具有属性绑定的字符串串联
- Javascript数据将元素属性绑定到URL中的锚href
- 从服务器端将属性绑定到套接字对象;似乎不能正常工作
- AngularJs 将模型属性绑定到复选框
- 属性绑定中的 Javascript 或 Query in Birt
- AngularJS指令将名称属性绑定到模板元素
- React JS - uncatch TypeError:无法读取未定义的属性“绑定”
- ng-options 模型基于属性绑定
- ReactJS 无法读取未定义的属性“绑定”
- 使用$scope属性绑定ng-includ-src
- 使用Knockout.js如何将Date属性绑定到HTML5日期选择器
- AngularJS:将角度服务属性绑定到范围
- 为什么可以't我使用原型将属性绑定到对象
- AngularJs:将作用域对象的属性绑定到指令
- 通过公共属性绑定指令实例
- EmberJS属性绑定
- 当使用映射时,属性绑定被破坏
- Angularjs属性绑定优先级