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