没有注册具有此名称的控制器

时间:2017-05-11 15:11:15

标签: angularjs

我正在研究一些Angular示例,并得到了一个有趣的异常场景&我想知道为什么会这样。

情景:

IT失败   - 当我在$(document)ready(function{ ... })

中创建控制器时

IT工作   - 当我完全创建我的控制器时

为什么吗 我确定你不应该像这样带入jQuery,但是,为什么它会失败?

在头部:

<script type="text/javascript">
        var appName = 'personal.web';
        var application = angular.module(appName, ['ngRoute']);

        application.config(function ($httpProvider, $routeProvider, $controllerProvider, $compileProvider, $filterProvider, $provide, $locationProvider) {

            // REQUIRED: Enables "late" registration
            application.register = {
                controller: $controllerProvider.register,
                directive: $compileProvider.directive,
                filter: $filterProvider.register,
                factory: $provide.factory,
                service: $provide.service
            };

            $locationProvider.html5Mode({
                enabled: true,
                requireBase: false
            });
        });

        application.run(function ($http) {
            console.log(appName + ' is running');
        });
    </script>

在身体中:

<div class="container" ng-controller="HomeIndexController">
    <div class="row">
        <h3>Home Body</h3>
    </div>
</div>
<div class="container">
    <div class="row" ng-view></div>
</div>

在页面底部:

失败:具有此名称的控制器未注册

<script type="text/javascript">
    $(document).ready(function () {

        application.controller('HomeIndexController', function ($scope) {

            var vm = this;

            console.log('HomeIndexController');
        });
    }); </script>

WORKS

application.controller('HomeIndexController', function ($scope) {

    var vm = this;

    console.log('HomeIndexController');
});

2 个答案:

答案 0 :(得分:1)

它失败了,因为在角度开始后文档就绪,所以你的应用程序正在寻找一个尚不存在的组件。它失败了......

答案 1 :(得分:1)

失败的原因是$(document).ready,angular会在呈现视图之前注册controllersservices等等。但是你在controller中定义了document.ready这已经太迟了,以至于angular会抛出无法找到控制器的错误。