javascript - 在 angularjs 中为每个 View 创建一个 Controller

标签 javascript angularjs angularjs-routing angularjs-controller

我是 AngularJS 的初学者,我想为每个 View 创建一个 Controller ,但是这个文件只能在加载 View 时引用,所以:

my app.js:

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

app.config(function($routeProvider)
{
    $routeProvider
    .when('/', { 
        templateUrl : 'app/views/login.html'
    })
    .when('/calendar', {
        templateUrl : 'app/views/calendar.html'
    })
    .otherwise ({ redirectTo: '/' });
});

app.run( function($route, $rootScope, $location)
{
    $rootScope.$on( "$routeChangeStart", function() 
    {
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.src = load_script($location.path());
        document.body.appendChild(s);
    });
});

function load_script(location) 
{
    switch(location)
    {
        case '/'            : return 'app/controllers/loginController.js';
        case '/calendar'    : return 'app/controllers/calendarController.js';
    }
}

在 View 中,我设置了 Controller 的名称并放置了一个指令来测试:

<h1>Página login!</h1>

<div ng-controller="loginCtrl">
    <p ng-bind="teste"></p>
</div>

在 Controller 中我设置:

app.controller('loginCtrl', function($scope)
{
    $scope.teste = 'loginCtrl';
});

我这样做了,但 $scope.teste 的值没有改变。我该如何解决这个问题?

最佳答案

您将脚本添加到页面中,但您不知道它何时被实际获取和解析。它可能正在等待服务器,或者没有及时解析,以便 Angular 在调用它之前注册它。您必须为脚本加载时设置延迟和管理回调,并解析 promise 让 Angular 知道何时一切都可以继续。这需要更多的工作。

此外,由于您的应用已经加载,因此您需要使用 $controllerProvider.register 来注册您的 Controller 。

如果您不想做这项工作(我只建议您自己做,作为了解其工作原理的一种方式),对于您想要尝试的事情,有大量的解决方案。尝试四处寻找“angularjs 延迟加载”或查看以下内容:https://github.com/nikospara/angular-require-lazy

关于javascript - 在 angularjs 中为每个 View 创建一个 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21166343/

相关文章:

javascript - Bootstrap 模式出现在 AngularJS 应用程序的后台

javascript - 为什么 Angulars JS 在 URL routeProvider 中给出错误?

javascript - 将 XML 转换为普通的旧 JavaScript 对象?

javascript - Facebook Javascript SDK : Error validating access token when posting to feed

javascript - 如何使用javascript将数据:image/png:base64. ..解码为真实图像

javascript - Angular - 如何在输入字段中显示与所选 ng-model 不同的所选值?

javascript - 防止 $scope 变量副本监听其原始内容

javascript - HTML Canvas 无法绘制图像

javascript - 部分中的 Angular 路由定义而不是 app.js

javascript - ng-controller 指令和路由中的 Controller 有什么区别?