使用 angularjs 为选择框添加 $watchGroup

Adding $watchGroup for selectboxes using angularjs

我对多个 selectbox 的 $watchGroup 有疑问。我有两个 select 框,我想添加 $watchers。

我尝试了以下方式,但没有为 select 个盒子工作观察者,

controller.js

          $scope.authorization = '';
          $scope.authentication = '';
          $scope.authorizationmodel = '';
          $scope.authenticationmodel = '';

          $scope.authenticationObj = [
            {id: 1, authtype: 'Authentication' },
            {id: 2, authtype: 'e-KYC' }           
          ];
          $scope.authorizationObj = [
              {id: 1, authtype: 'Best Finger Detection' },
              {id: 2, authtype: 'One Time Password' }           
          ];

          $scope.$watchGroup(['authorizationmodel', 'authenticationmodel'], function(newValues, oldValues, scope) {                 
            console.log(newValues[0]+'--'+newValues[1]);
            if(newValues[0].id !== undefined && newValues[1].id !== undefined){         
              $scope.authorization = newValues[0].id;
              $scope.authentication = newValues[1].id;
            }            
          });

application.html

<md-card flex="flex">
            <md-card-content>
                <md-input-container class="md-block" flex-gt-sm>
                    <label>Type of service</label>
                    <md-select ng-model="authenticationmodel">
                        <md-option ng-value="auth" ng-repeat="auth in authenticationObj">
                            {{auth.authtype}}
                        </md-option>
                    </md-select>
                </md-input-container>
                <md-input-container class="md-block" flex-gt-sm>
                    <label>Authorization via</label>
                    <md-select ng-model="authorizationmodel">
                        <md-option ng-value="auth1" ng-repeat="auth1 in authorizationObj">
                            {{auth1.authtype}}
                        </md-option>
                    </md-select> 
                </md-input-container>  
            </md-card-content>
        </md-card>

我就是这样做的 - CodePen

我在将对象传递给 ng-model 之前遇到了问题,因为 md-select 传递给 $watch 或 $watchGroup(这是你正在做的),所以我使用 $index.

标记

<div ng-controller="AppCtrl" ng-cloak="" ng-app="MyApp">
  <md-card flex="flex">
    <md-card-content>
      <md-input-container class="md-block" flex-gt-sm>
        <label>Type of service</label>
        <md-select ng-model="authenticationIndex">
          <md-option ng-value="$index" ng-repeat="auth in authenticationObj">
            {{auth.authtype}}
          </md-option>
        </md-select>
      </md-input-container>
      <md-input-container class="md-block" flex-gt-sm>
        <label>Authorization via</label>
        <md-select ng-model="authorizationIndex">
          <md-option ng-value="$index" ng-repeat="auth1 in authorizationObj">
            {{auth1.authtype}}
          </md-option>
        </md-select> 
      </md-input-container>  
    </md-card-content>
  </md-card>
  Authorization: {{authorization}}, Authentication: {{authentication}}
</div>

JS

$scope.$watchGroup(['authenticationIndex', 'authorizationIndex'], function() {
    if (angular.isDefined($scope.authenticationIndex) && angular.isDefined($scope.authorizationIndex)) {         
       console.log($scope.authenticationObj[$scope.authenticationIndex], $scope.authorizationObj[$scope.authorizationIndex]);

       $scope.authorization = $scope.authenticationObj[$scope.authenticationIndex].id;
       $scope.authentication = $scope.authorizationObj[$scope.authorizationIndex].id;

       console.log($scope.authorization, $scope.authentication);
    }            
});