【问题标题】:Argument 'NavController' is not a function, got undefined参数 'NavController' 不是函数,未定义
【发布时间】:2015-05-17 16:34:05
【问题描述】:

我在启动应用程序时收到此错误 这是控制器:

myApp
    .controller('NavController',
    ['$scope', '$location', function ($scope, $location) {
        $scope.navClass = function (page) {
            var currentRoute = $location.path().substring(1) || 'main';
            return page === currentRoute ? 'active' : '';
        };
    }]);

这是 app.js:

angular.module('myApp',[
    'ngRoute'])
        .config(['$routeProvider',
            function($routeProvider){
                $routeProvider
                    .when('/',{
                    templateUrl:'views/main.html',
                    controller: 'mainCtrl'
                })
               .when('/team1',{
                        templateUrl:'views/team1.html',
                        controller: 'mainCtrl'
                    })
            }]);

以及我使用控制器的 htmlIndex:

<header>
        <div class="container">

            <div class="navbar">
                <ul class="nav navbar-nav" ng-controller="NavController">
                    <li ng-class="navClass('home')"><a href='#/'>Home</a></li>
                    <li ng-class="navClass('home')"><a href='#/team1'>team1</a></li>
                </ul>
            </div>
        </div>
    </header>

我单击导航按钮没有任何反应,在控制台中我收到此错误“参数 'NavController' 不是函数,未定义”

【问题讨论】:

    标签: html angularjs node.js


    【解决方案1】:

    也许你以错误的方式调用控制器。应该在这样的应用程序上调用它:

    angular.module('myApp')
    .controller('NavController',
    ['$scope', '$location', function ($scope, $location) {
        $scope.navClass = function (page) {
            var currentRoute = $location.path().substring(1) || 'main';
            return page === currentRoute ? 'active' : '';
        };
    }]);
    

    看看这个小提琴的完整代码:https://jsfiddle.net/q91jozyr/

    【讨论】:

    • 做了你建议的改变还是同样的问题有什么建议吗?
    • 你检查过 jsfiddle 链接吗?是否按预期工作?在那里我没有得到任何未定义的错误。让我确切知道什么不起作用
    【解决方案2】:

    当您使用angular.module('myApp', ['ngRoute']) 定义模块时,您需要在声明控制器时将引用保存在变量myApp 中以重用模块。

    app.js:

    var myApp = angular.module('myApp', ['ngRoute'])
    

    或者我建议通过像这样重用模块来调用控制器:

    控制者:

    angular.module('myApp').controller('NavController', [ /* etc... */ ]);
    

    请注意,如果您不再次指定依赖项,例如 angular.module('myApp') 而不是 angular.module('myApp', [ ]),则该模块正在被重用。

    在这两种情况下,确保模块 myApp 是通过将 ng-app="myApp" 添加到任何父元素来引导的,例如&lt;body&gt;:

    <body ng-app="myApp">
    

    【讨论】:

    • 做了你建议的改变还是同样的问题有什么建议吗?
    • 尝试将 ng-app 添加到 &lt;header&gt; 例如或在&lt;body&gt; 中像这样:&lt;body ng-app="myApp"&gt;
    猜你喜欢
    • 2013-03-22
    • 2015-09-10
    • 2016-10-28
    • 2016-12-17
    • 2016-05-22
    • 2014-06-29
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    相关资源
    最近更新 更多