Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为angularjs中的每个视图创建控制器_Javascript_Angularjs_Angularjs Routing_Angularjs Controller - Fatal编程技术网

Javascript 为angularjs中的每个视图创建控制器

Javascript 为angularjs中的每个视图创建控制器,javascript,angularjs,angularjs-routing,angularjs-controller,Javascript,Angularjs,Angularjs Routing,Angularjs Controller,我是AngularJS的初学者,我想为每个视图创建一个控制器,但只有在加载视图时才能引用此文件,因此: my app.js: var app = angular.module('app',['ngRoute']); app.config(function($routeProvider) { $routeProvider .when('/', { templateUrl : 'app/views/login.html' }) .when('/c

我是AngularJS的初学者,我想为每个视图创建一个控制器,但只有在加载视图时才能引用此文件,因此:

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';
    }
}
在视图中,我设置了控制器的名称,并放置了一个要测试的指令:

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

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

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

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

此外,由于您的应用程序已加载,您需要使用
$controllerProvider.register
在加载后注册控制器

如果你不想做这项工作(我只建议你自己做这项工作,以此来了解它是如何工作的),那么对于你正在尝试的事情,有很多解决方案。尝试查找“angularjs惰性负载”或查看以下内容:

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