簡體   English   中英

如果在另一個控制器中更新值,如何在一個控制器中更新值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM