Javascript 使用'时出错;ControllerAs';但使用'时效果良好$范围';在ng中重复复选框
当使用“$scope”语法时,选中单个复选框会正确输出其相应的对象名称,但当对同一代码应用“ControllerAs”语法时,选中单个复选框会异常生成错误Javascript 使用'时出错;ControllerAs';但使用'时效果良好$范围';在ng中重复复选框,javascript,angularjs,checkbox,angularjs-ng-repeat,angularjs-controlleras,Javascript,Angularjs,Checkbox,Angularjs Ng Repeat,Angularjs Controlleras,当使用“$scope”语法时,选中单个复选框会正确输出其相应的对象名称,但当对同一代码应用“ControllerAs”语法时,选中单个复选框会异常生成错误 $scope.users = [{.....}] //using $scope syntax $scope.selected = []; $scope.exist = function(item) { return $scope.selected.indexOf(item) > -1; } $scope.toggleSelecti
$scope.users = [{.....}] //using $scope syntax
$scope.selected = [];
$scope.exist = function(item) {
return $scope.selected.indexOf(item) > -1;
}
$scope.toggleSelection = function(item) {
var idx = $scope.selected.indexOf(item);
if (idx > -1) {
$scope.selected.splice(idx, 1);
} else {
$scope.selected.push(item);
}
}
上述代码在ControllerAs中的表示
vm.users = [{....}] //Using 'Controller As' Syntax
vm.selected = [];
vm.exist = function(item) {
return vm.selected.indexOf(item) > -1;
}
vm.toggleSelection = function(item) {
var idx = vm.selected.indexOf(item);
if (idx > -1) {
vm.selected.splice(idx, 1);
} else {
vm.selected.push(item);
}
}
chrome开发者工具中返回错误
TypeError:vm.selected.indexOf不是函数
位于GridController.vm.exist(GridController.js:37)
演示控制器为
演示$Scope
请注意,当控制器作为语法应用于此上下文时,可能会出现什么问题,或者这可能是一个错误,谢谢在您的plunkr中,您将
vm.selected
绑定到一个复选框;这告诉angular将其设置为布尔值。当您尝试在其上调用.indexOf
时,它会失败,因为带有ng模型的复选框默认为true
或false
请参见此处:您的
切换选择
功能所做的工作与ng模型
类似,只是ng模型
在$scope
代码中为每个用户
选择了一个属性,但是,由于JavaScript原型继承如何处理原语,因此在控制器中选择了一个单数的vm.selected
属性作为版本。这是一个主要的例子,说明在绑定中不使用
会导致意外的结果
在本例中,ng模型
正在将vm.从数组中选择的
转换为布尔值,这将级联到exist
函数中的错误,该函数现在看到的布尔值没有.indexOf
属性
在这种情况下,您的toggleSelection
代码正在执行其余代码逻辑所需的操作,而实际上不需要ng model