ng-change功能选择前调用on-load

时间:2016-12-28 07:47:19

标签: angularjs material-design angularjs-select

调用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时调用。我的剧本中有什么错误

3 个答案:

答案 0 :(得分:1)

在选择选项之前调用changeStudentStatus()eveytime加载页面。

<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  
              }
        };

答案 1 :(得分:-3)

更改

ng-change="changeStudentStatus();" 

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

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

我认为您将控制器更新为ctrl,因为您使用ctrl.*调用了其他方法/属性

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

答案 2 :(得分:-3)

当您使用方法ngModelCtrl时,将自动评估ng-change表达式。$ setViewValue。

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
  };
}};});