![](/img/trans.png)
[英]Angularjs Can I change $scope value of a controller from another controller?
[英]How can I pass down a value in the $scope to an inner controller in AngularJS?
在我的angular app.js中,我的index.html中的主控制器我希望有這樣的函數:
$scope.login = function (user) {
$scope.authenticating = true;
var config = {
method: 'POST',
url: '/api/Account/Login',
data: {
'userName': user.loginUserName,
'password': user.loginPassword,
'rememberMe': user.loginRememberMe
}
};
$http(config)
.success(function (data) {
authentication.isAuthenticated = true;
authentication.userName = user.loginUserName;
localStorage.isAuthenticated = 'yes';
$scope.template = $scope.templates[1];
$state.transitionTo('home');
})
};
在我的index.html中的模板控制器中,我希望能夠訪問userName。 誰能告訴我怎么做到這一點? 最初我嘗試在app.js中設置$ scope.user = {}然后設置$ scope.user.userName但是當我打開另一個模板及其app.js 內的控制器時,$ scope.user似乎不可見。
您可以使用服務在控制器之間共享數據
app.service('userService', function() {
var user = {};
setUserName = function(name) {
user.name = name;
};
getUser = function(){
return user;
};
});
設置數據的控制器
app.controller('FooController', ['$scope', 'userService',
function ($scope, userService) {
$scope.login = function (user) {
$scope.authenticating = true;
var config = {
method: 'POST',
url: '/api/Account/Login',
data: {
'userName': user.loginUserName,
'password': user.loginPassword,
'rememberMe': user.loginRememberMe
}
};
$http(config)
.success(function (data) {
authentication.isAuthenticated = true;
userService.setUserName(user.loginUserName);
localStorage.isAuthenticated = 'yes';
$scope.template = $scope.templates[1];
$state.transitionTo('home');
})
};
}
]);
其他控制器,用於檢索數據
app.controller('BarController', ['$scope', 'userService', function($scope, userService) {
var username = userService.getUser().name
});
由於您的檢索是異步的,您可能需要向用戶服務添加一些事件/回調機制,以便在設置/更改名稱時通知控制器。
所有子控制器都從父級繼承$scope
變量
<div ng-controller="c1">
<div ng-controller="c2"></div>
</div>
youApp.controller('c1', ['$scope', function($scope){
$scope.blabla = 1;
}]);
youApp.controller('c2', ['$scope', function($scope){
// $scope.blabla is also 1 here because c2 is a child of c1
}]);
您可以在內置$rootScope
服務中存儲任何數據。 服務是Angular中的單身人士
yourApp.run(['$rootScope', functin($rootScope){
$rootScope.foo = 'bar';
// you can inject $rootScope in any controller you want and use $rootScope.foo
}]);
正如@Robin建議的那樣,我還建議您編寫自己的服務以進行授權
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.