Javascript 为angularjs中的每个视图创建控制器
我是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
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';
});