3

如果使用了某个 url,我正在尝试使用 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);URL 之一,则不会调用...

也许有人知道如何解决这个问题?

4

3 回答 3

6

在 $routeProvider 配置中指定模板或 templateUrl 选项之前,不会调用控制器。如果不需要模板,您可以指定一个空格字符(但不是空字符串)。像这样

$routeProvider.when('/link1', {
     controller: 'PageController',
     template: ' '
})
于 2013-08-27T17:12:07.900 回答
1

无法将路由与控制器中的特定操作相关联。AngularJS 中的路由不像其他 Web 框架中的路由那样路由到请求的特定操作。相反,AngularJS 中的路由主要与处理页面流有关,控制器定义页面的范围。

但是,如果您像这样将警报放在控制器中,它应该在页面加载时触发。您需要检查您使用的 URL 是否正确。要进行测试,您只需$location.url('/link1')输入代码即可。

于 2013-08-27T15:36:16.600 回答
0

如果您的控制器正在特定路由上使用,那么您可以在控制器内部调用该函数。一旦路由更改并且您的控制器被调用,它将被执行。

在此http://plnkr.co/edit/qUZ5Q7nKCRAS8dFvjRIg中,当您单击链接 1 时,它会显示警报。

我不太明白为什么您的代码无法按预期工作,但我创建了一个类似的应用程序设置并且它可以工作:

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 分配给路由并且打开该路由时,就会执行警报功能。

于 2013-08-27T15:35:48.673 回答