我有一个指令,用户需要和定义中的bindToController。
(function(){
'use strict';
angular.module('core')
.directive('formValidationManager', formValidationManager);
function formValidationManager() {
return {
require: {
formCtrl: 'form'
},
restrict: 'A',
controller: 'FormValidationManagerCtrl as fvmCtrl',
priority: -1,
bindToController: true
};
}
}());
根据角度文档:
如果require属性是一个对象而bindToController是真的, 然后使用所需的控制器绑定到控制器 require属性的键。这种绑定发生在所有之后 控制器已经构建,但在调用$ onInit之前。看到 $ compileProvider助手,以获取如何使用它的示例。
所以我希望在我的控制器中:
(function () {
'use strict';
angular
.module('core')
.controller('FormValidationManagerCtrl', FormValidationManagerCtrl);
FormValidationManagerCtrl.$inject = ['$timeout', '$scope'];
function FormValidationManagerCtrl($timeout, $scope) {
var vm = this;
vm.API = {
validate: validate
};
//vm.$onInit = activate;
function activate() {
}
function validate() {
$scope.$broadcast('fvm.validating');
var firstInvalidField = true;
Object.keys(vm.formCtrl).forEach(function (key) {
var prop = vm.formCtrl[key];
if (prop && prop.hasOwnProperty('$setTouched') && prop.$invalid) {
prop.$setTouched();
if (firstInvalidField) {
$timeout(function(){
var el = $('[name="' + prop.$name + '"]')[0];
el.scrollIntoView();
}, 0);
firstInvalidField = false;
}
}
});
return firstInvalidField;
}
}
})();
vm.formCtrl将使用表单控制器填充。但是,它是未定义的。为什么不定义?另外,我试图在$ onInit函数中访问它,但$ onInit函数从未被调用过。我做错了什么?
我正在使用这样的指令:
<form novalidate name="editUserForm" form-validation-manager>
答案 0 :(得分:1)
我不确定这是否是您的问题,但我认为您的指令声明应如下所示:
controller: 'FormValidationManagerCtrl',
controllerAs: 'vm',
而不是:
controller: 'FormValidationManagerCtrl as fvmCtrl',
答案 1 :(得分:0)
看起来这与角度版本有关。我在1.4.6,不支持这个。我已升级到1.5.0,其中OP中的代码运行良好。