AngularJS在$rootScope和$scope之间进行选择
AngularJS choosing between $rootScope and $scope
我有一个应用程序,其中前端是建立在AngularJS和后端是在laravel 5.1。
用户身份验证由帐户控制器通过API调用完成:
myApp.controller('LoginCtrl', function($scope,$auth,$location){
$scope.authenticate = function(provider){
$auth.authenticate(provider)
.then(function() {
toastr.success('You have successfully signed in with ' + provider);
$location.path('/');
})
.catch(function(response) {
toastr.error(response.data.message);
});
};
});
angular.module('MyApp')
.factory('Account', function($http){
return {
getProfile: function(){
return $http.get('/api/me');
}
}
});
一旦认证,getProfile
函数被调用,控制器将用户数据填充到视图中:
myApp.controller('UserApiCtrl', function($scope,$auth,Account){
$scope.user = {};
$scope.getProfile = function(){
Account.getProfile()
.then(function(response){
$scope.user = response.data;
})
.catch(function(response){
})
};
$scope.getProfile();
})
对于页面能够在所有不同的控制器上呈现用户数据,我应该将用户数据分配给$scope
还是将其分配给app.js中的$rootScope
,其中用户数据将在全局可用
你可以使用$cookies("提供对浏览器cookies的读/写权限")
myApp.controller('UserApiCtrl', function($scope,$auth,Account,Auth,$cookies){
$scope.user = {};
$scope.getProfile = function(){
Account.getProfile()
.then(function(response){
$cookies.putObject('user', response.data);
})
.catch(function(response){
if(response.status === 401)
$cookies.remove('user');
})
};
$scope.getProfile();
})
示例服务:
myApp.factory('Auth', ['$rootScope', '$cookies', function($rootScope, $cookies) { $rootScope.user = $cookies.getObject('user') || { id: '', token: '' };
…
我在我的body标签上使用了一个控制器来提供对更多全局内容的访问,然后在我的各个视图中的控制器来做更特定于视图的事情。
<body ng-controller = "appController as app">
<div ui-view></div>
</body>
对我来说,这似乎比使用$rootScope更干净。
相关文章:
- Jquery在函数之间传递表行
- 什么是&&在没有if的行中的变量之间
- DataTables在表之间移动行
- 如何使用javascript函数在gridview中按行启用/禁用复选框
- 如何使用JS禁用表行,并在MYSQL中插入所选选项
- 选中复选框的Jquery/Javascript问题使用输入框操作将行从一个表添加到另一个表
- 在参考行中显示多选选项
- ui网格如何在单击行时选中复选框
- 选择所有td's基于所选内容覆盖多行
- 在两个多选字段之间移动选项
- Boostrap和所选插件之间的冲突
- “动态创建的表”上的复选框(每行最多只能选择1个)
- jQuery可选小部件和单列表行
- HTML 表单文件中的行号与文本区域中的行号之间的对应关系
- 在 2 个多选之间拖放
- 获取单词和行尾之间的文本
- 获取第一个单词和换行符之间的内容
- 正则表达式:在字符或字符和行尾之间获取字符串
- 用单个换行符替换多个换行符,并尊重换行符之间的文本
- Javascript Regex在第一个冒号和可选的行尾或第二个冒号之间选择文本