[英]How to update value in one controller if the value is updated in different controller?
我有一個頁面設計,其中將主控制器附加到主體上:
<body ng-controller="firstController">
<a href="#">first</a>
<a href="#/second">second</a>
<input ng-model="hello" ng-disabled="xyz()">
<button id="test" ng-disabled="xyz()">test button</button>
{{hello}}
<div ng-view></div>
</body>
我加載默認模板為
var mainApp = angular.module('mainApp',['ngRoute'])
.config(['$routeProvider',function($routeProvider){
$routeProvider.when('/',{
templateUrl: 'partials/first.html',
controller: 'firstTemplate'
})
我我的模板ia復選框為:
<div>
<input type="checkbox" ng-model="check">
</div>
現在我想禁用按鈕#id,取消選中該復選框,現在我考慮使用factory,因為這兩個位於不同的控制器中:
mainApp.factory('clientId',function(){
var flag = true;
return flag;
});
mainApp.controller('firstController',['$scope','clientId',function($scope,clientId){
//$scope.check = true;
clientId.flag = false;
$scope.xyz = function(){
if(clientId){
return true;
}else{
return false;
}
}
}])
我能夠從工廠獲取值,現在我想從其他控制器(模板控制器)更新標志的值,並且該值也應反映在第一個控制器中,以便可以更新按鈕的狀態。
mainApp.controller('firstTemplate',['$scope','clientId',function($scope,clientId){
}])
我如何從第二個控制器更新值,並使其反映在第一個控制器中。 如果不可能的話,還有替代方法可以做到這一點嗎?
是的,您可以使用$ rootScope
方法是。
在控制器中初始化$rootScope
從第二個控制器調用第一個控制器作用域變量
如果第一個控制器變量是$scope.name
現在您只需在第二個控制器中調用$rootScope
而不是$scope
喜歡
$rootScope.name
You can solve this using two ways.
1. using $rootScope.
2. using services.
使用$ rootScope:
<input ng-model="hello" ng-disabled="flagtoDisable">
<button id="test" ng-disabled="flagtoDisable">test button</button>
{{hello}}
<div ng-view></div>
mainApp.controller('firstController', ['$scope','$rootScope','clientId',function($scope,$rootScope,clientId){
//$scope.check = true;
clientId.flag = false;
$scope.xyz = function(){
if(clientId){
return true;
}else{
return false;
}
}
}])
mainApp.controller('firstTemplate','$scope','$rootScope','clientId',
function($scope,$rootScope,clientId){
$rootScope.flagtoDisable = false;
if($scope.check == true){
$rootScope.flagtoDisable = true;
}
}])
使用服務:
mainApp.factory('clientId',function(){
var flag = {
status:false; };
return{
setFlag : funcion() {
flag.status = true;
}
getFlag : funcion() {
return flag;
}
});
mainApp.controller('firstController',['$scope','clientId',function($scope,clientId){
//$scope.check = true;
$scope.xyz = function(){
var flag = clientId.getFlag();
return flag.status;
}
}])
<input ng-model="hello" ng-disabled="xyz()">
<button id="test" ng-disabled="xyz()">test button</button>
{{hello}}
<div ng-view></div>
mainApp.controller('firstTemplate',['$scope','clientId',function($scope,clientId){
if($scope.check== true){
clientId.setFlag();
}
}])
此代碼未經測試。您可以按照以下方法進行操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.