参数'mainController'不是函数,未定义1.4

时间:2016-09-15 03:24:31

标签: angularjs

有大量使用更新的角度指令的例子,例如ng-blur,ng-focus,form validation等。它们在单个页面或plinkr,jsfiddle等中都很好用,但尝试在全局命名空间上定义函数的人,这个错误是记录良好的。

然而,我遇到了另一个问题。

我使用的是example from Scotch.io。这个很好用......直到你把它介绍到使用angular-route的SPA :(

经过几个小时的战斗,错误'Argument'mainController'不是函数,得到了未定义',我在Hajder Rabiee的评论中找到了答案。谢谢Hadjer,爱你的男人!

1 个答案:

答案 0 :(得分:0)

Hajder离开this comment并在其中,他说:

如果你正在使用路由(概率很高)并且你的配置引用了一个未被声明为依赖的模块中的控制器,那么初始化也可能会失败。

假设您已为您的应用配置了ngRoute,例如

angular.module('yourModule',['ngRoute'])
.config(function($routeProvider, $httpProvider) { ... });

在声明路线的区块中要小心,

.when('/resourcePath', { 
templateUrl: 'resource.html',
controller: 'secondModuleController' //lives in secondModule
});

在'ngRoute'解决问题后,将secondModule声明为依赖项。我知道我有这个问题。

即使有这个帮助我花了一分钟才能让它工作,所以我想我会在这里分享我的示例代码,以帮助下一个陷入困境的可怜的混蛋。

首先,在我申报路线的地方:

var app = angular.module('sporkApp', ['ngRoute','validationApp']);
app.config(function ($routeProvider) {
    $routeProvider
        .when('/home',
        {
            controller: 'HomeController',
            templateUrl: 'home/home.template.html'
        })
        .when('/tags',
        {
            controller: 'TagsController',
            templateUrl: 'tags/tags.template.html'
        })
        .when('/test',
        {
            controller: 'mainController',
            templateUrl: 'test/test.template.html'
        })
        .otherwise({ redirectTo: '/home' });
});

然后,您需要在某处添加控制器代码,它将在shell页面中加载:

// create angular app
var validationApp = angular.module('validationApp', []);

// create angular controller
validationApp.controller('mainController', function($scope) {

    // function to submit the form after all validation has occurred            
    $scope.submitForm = function() {

        // check to make sure the form is completely valid
        if ($scope.userForm.$valid) {
            alert('our form is amazing');
        }

    };

}); 

最后,您需要将相应的ng-appng-controller添加到包含您要验证的控件的某个页面元素。我把以下内容放在div标签中:

<div ng-app="validationApp" ng-controller="mainController">