ngModel.$setViewValue 在尝试设置模型值时不是一个函数



我从指令的链接函数中得到的ngModel是一个集合,而不是ngModel的实例。当然,当我尝试调用ngModel.$setViewValue('bill')时,我的程序会抛出一个错误,ngModel.$setViewValue is not a function

如果我更改我的 changeName 函数以解决数组的第一个元素,它工作正常。为什么在这种情况下ngModel作为集合出现?元素的顺序指的是什么?我该如何解决它?

$scope.changeName = function(){
ngModel[0].$setViewValue('bill');
console.log(ngModel);
}

代码笔示例

angular.module('app', []);
angular.module('app')
.controller('MainController', function($scope) {
$scope.name = "Greg"
});
angular.module('app').directive('multiselectDropdown', multiSelectDropDown);
function multiSelectDropDown($window, $rootScope) {
return {
scope: {
ngModel: '=',
},
require: ['?ngModel'],
restrict: 'E',
template: '<div>hi, {{ngModel}}<br><br><button ng-click="changeName()">Change name to bill.</button><br><br></div>',
replace: true,
link: linkFn
};
function linkFn($scope, iElement, iAttrs, ngModel) {
$scope.changeName = function() {
ngModel.$setViewValue('bill');
console.log(ngModel);
}
}
}

因为您将require属性指定为数组,所以 angular 会给你的链接函数一个数组作为结果。 该数组将包含请求的控制器。

如果只需要 ngModel 控制器,则可以将其作为字符串传递到需要。 否则,您需要在提供给链接函数的数组中引用它。

require

需要另一个指令并将其控制器作为链接函数的第四个参数注入。require 属性可以是字符串、数组或对象:

  • 一个字符串,包含要传递给链接函数的指令的名称
  • 一个数组,其中包含要传递给链接函数的指令的名称。传递给链接函数的参数将是一个控制器数组,其顺序与 require 属性中的名称顺序相同
  • 一个对象,其属性值是要传递给链接函数的指令的名称。传递给链接函数的参数也将是一个具有匹配键的对象,其值将保存相应的控制器。

(着重号后加)

最新更新