ng-change 函数在选择之前调用 on-load

ng-change function Calling on-load before selecting

在选择选项之前调用 ng-change="changeStudentStatus();" 加载函数。

<md-select ng-model="ctrl.newStudentStatus" ng-change="changeStudentStatus();" ng-if="ctrl.studentStatusList" >
   <md-option class="ss-options" ng-value="item.display_name" ng-repeat="item in ctrl.studentStatusList" ng-selected="item.id == ctrl.statusId">{{item.display_name}}</md-option>
</md-select> 

脚本:

$scope.changeStudentStatus = function(){
     //some logic  
};

它应该在使用更改 DropDown 时调用。我的脚本有什么问题

改变

ng-change="changeStudentStatus();" 

ng-change="ctrl.changeStudentStatus();"

不同之处在于,在您的代码中,您调用了一个名为 changeStudentStatus() 的方法。此方法在控制器上不可用。

我假设你将你的控制器别名为 ctrl 因为你的另一个 methods/properties 被调用 ctrl.*

当您调用方法 ctrl.changeStudentStatus() 时,您实际上调用了在控制器上设置的方法。

当您使用方法 ngModelCtrl.$setViewValue.

时,ng-change 表达式将被自动评估
angular.module("myApp").directive("mdselect", function(){  return {
require:"^ngModel", // this is important, 
scope:{      ... // put the variables you need here but DO NOT have a variable named ngModel or ngChange 
}, 
link: function(scope, elt, attrs, ctrl){ // ctrl here is the ngModelCtrl
  scope.setValue = function(value){
    ctrl.$setViewValue(value); // this line will automatically eval your ng-change
  };
}};});

每次在 select 选项之前加载页面时都会调用 changeStudentStatus()。

<md-select ng-model="ctrl.newStudentStatus" ng-change="changeStudentStatus();" ng-if="ctrl.studentStatusList" >
   <md-option class="ss-options" ng-value="item.display_name" ng-repeat="item in ctrl.studentStatusList" ng-selected="item.id == ctrl.statusId">{{item.display_name}}</md-option>
</md-select> 

我刚刚用临时解决方案解决了这个问题, 我必须仅在用户更改值时调用 changeStudentStatus,因此我正在创建一个临时变量并存储较早的值,只能在值更改时执行逻辑。

脚本:

$scope.newValue  =ctrl .newStudentStatus;
        $scope.changeStudentStatus = function(){
              if($scope.oldVlaue === $scope.newValue)
              {
                //some logic  
              }
        };

我这样做解决了:

    $scope.changeStudentStatus = function(){
          if($scope.ctrl.newStudentStatus)
          {
            //some logic  
          }
    };