【发布时间】:2016-05-16 00:38:13
【问题描述】:
我有一个指令,定义中的用户需要和 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>
【问题讨论】:
标签: angularjs