我是Angular的新手,无法确定我哪里出错了。我只是想把我的工厂注入我的控制器,参考说:“无法读取未定义的属性'validar'”。我有两个文件,ServiceUtil.js有一个服务和CentroCustoCtrl.js,我正在尝试使用服务的功能。
ServiceUtil.js上的函数:
(function () {
'use strict';
angular.module('Services', [])
.service('ValidarFormulario', [function () {
this.validar = function (form) {
var valido = true;
//code
}
return valido;
}
}]);
})();
和CentroCustoCtrl.js
(function () {
'use strict';
var app = angular.module("start", ['AxelSoft', 'ngLocalize',
'ngLocalize.Config', 'mvComponentes','Services'])
.value('localeConf', {
basePath: '../Scripts/Locales', ...
...
});
app.controller('CentroCustoCtrl', ['$scope', '$http', 'ValidarFormulario', function ($scope, $http, $rootScope, $timeout, ValidarFormulario) {
$scope.Salvar = function () {
if (ValidarFormulario.validar(document.getElementsByTagName('input'))) { ...// Cannot read property 'validar' of undefined
);
我尝试过工厂,但也没有工作:
angular.module('Services', [])
.factory('ValidarFormulario', [function () {
return{
validar : function (form) {
var valido = true;
//code
}
}
return valido;
}
}
}]);
})();
拜托,我感谢您提供的任何帮助。
答案 0 :(得分:3)
问题是你在DI内联数组中有错误的依赖序列,基本上它们的数量和序列不匹配
app.controller('CentroCustoCtrl', ['$scope', '$http', 'ValidarFormulario',
//removed $rootScope, $timeout which wasn't used.
function ($scope, $http, ValidarFormulario) {
或者无论哪种方式你都可以在数组中添加依赖项,如果它们真的要在内部控制器中使用
app.controller('CentroCustoCtrl', ['$scope','$http','$rootScope','$timeout','ValidarFormulario',
function ($scope, $http, $rootScope, $timeout, ValidarFormulario) {
答案 1 :(得分:1)
只需更改以下代码行
即可app.controller('CentroCustoCtrl', ['$scope', '$http', 'ValidarFormulario', function ($scope, $http, $rootScope, $timeout, ValidarFormulario) {
到
app.controller('CentroCustoCtrl', ['$scope', '$http', '$rootScope', '$timeout', 'ValidarFormulario', function ($scope, $http, $rootScope, $timeout, ValidarFormulario) {
这应该有用。
答案 2 :(得分:1)
嗯,我也看到你的控制器注射是错误的。你有:
App.controller('CentroCustoCtrl', ['$scope', '$http', 'ValidarFormulario', function ($scope, $http, $rootScope, $timeout, ValidarFormulario)
你应该:
app.controller('CentroCustoCtrl', ['$scope', '$http', '$rootScope', '$timeout', 'ValidarFormulario', function ($scope, $http, $rootScope,$timeout, ValidarFormulario)
" []"必须带有功能参数。
答案 3 :(得分:0)
设置模块时,语法为:
newy
但是当你得到一个模块来使用它时,语法必须是:
angular.module('Services', [ here injections ])