如果使用某个网址,我正在尝试使用angularjs的路由来调用javascript函数。
以下代码未提供预期结果:
var app = angular.module('myApp', []);
app.config(function($routeProvider) {
$routeProvider.when('/link1', {
controller: 'PageController'
})
.when('/link2', {
controller: 'PageController'
})
.otherwise({
controller: 'PageController'
});
});
app.controller('PageController', function($scope, $routeParams) {
alert('1');
});
如果请求其中一个网址,则不会调用alert(1);
...
也许有人知道如何解决这个问题?
答案 0 :(得分:6)
在$ routeProvider配置中指定template或templateUrl选项之前,不会调用Controller。如果不需要模板,则可以指定一个空格字符(但不是空字符串)。像这样
$routeProvider.when('/link1', {
controller: 'PageController',
template: ' '
})
答案 1 :(得分:1)
无法将路由与控制器中的特定操作相关联。 AngularJS中的路由与其他Web框架中的路由不同,以路由到请求的特定操作。相反,AngularJS中的路由主要与处理页面流有关,控制器定义了页面的范围。
但是,如果您将警报放在控制器中,则应在加载页面时触发警报。您需要检查您使用的URL是否正确。要进行测试,您只需将$location.url('/link1')
放入代码即可。
答案 2 :(得分:0)
如果您的控制器正在特定路线上使用,那么您可以在控制器内调用该功能。一旦路线改变并且你的控制器被调用,它就会被执行。
在此http://plnkr.co/edit/qUZ5Q7nKCRAS8dFvjRIg中,当您点击link1时,它会显示警告。
我无法理解为什么你的代码没有按预期工作,但我创建了一个类似的应用程序设置,它可以工作:
var app = angular.module('myApp',[]).
config(['$routeProvider',function($routeProvider) {
$routeProvider.
when('/', {
controller: 'PageController',
template: '<br><br>this is page #/<br> {{data}}',
}).
when('/link1', {
controller: 'SpecificPageController',
template: '<br><br>this is page #/link1<br> {{data}}'
}).
when('/link2', {
controller: 'PageController',
template: '<br><br>this is page #/link2<br> {{data}}'
}).
otherwise({redirectTo:'/'});
}]).
controller('PageController', function($scope, $routeParams) {
$scope.data = 'hello world';
}).
controller('SpecificPageController', function($scope, $routeParams) {
$scope.data = 'hello specific';
alert(1);
});
每当将SpecificPageController分配给路由并打开该路由时,都会执行alert函数。