路由到特定路线Angularjs时运行一个功能?

时间:2014-05-19 08:35:24

标签: javascript angularjs

我正在使用angularjs开发一个应用程序我需要做的是在路由更改为特定路由时基本上运行一些脚本我知道我可以为每个路由定义一个单独的控制器。因为,有些路径应该有共享数据,我在其中一些路由器之间共享一个控制器

  formApp.config(function($routeProvider) {
       $routeProvider

      .when('/firstUrl',{
          templateUrl : 'firstURL',
          controller : 'mainController'
       })

      .when('/secondURL' , {
          templateUrl : 'secondURL',
          controller : 'mainController'
       }) 

     }).run(function($rootScope, $location) {
         $rootScope.$on("$routeChangeStart", function(event, next, current) {
         if ( signed_in == false ) {

             $location.path("/login");
          }
      });
  });

以上是我的配置代码, 我的问题:我需要知道是否可以修改run()函数中的代码,以便根据用户重定向到某些脚本的路径运行。

或者如果这不是正确的方法,请纠正我如何解决这个问题?

提前致谢

1 个答案:

答案 0 :(得分:2)

我建议每条路线至少创建一个控制器。它使代码更易于管理。 然后,您可以定义在每个控制器加载时运行的init函数。

要在控制器之间共享您需要创建服务的数据,这是正确的方法,而不是为多个路径共享同一个控制器。

在开发过程中,它还可以为您提供更多的灵活性。

更新

示例 (仅作为示例命名。尽量不要进行任意命名。)

<强>#服务

angular.module('myService', [])

.factory('mSrv',[ function() {

    return {

        data: {
            'first_name': 'John',
            'last_name': 'Doe'
        }

    };

}])

;

<强>#控制器1

angular.module('initMyCtrl1', ['myService'])

    .controller('InitMyCtrl1', function( $scope, mSrv ) {

        var initMyCtrl1 = function(){
            console.log('runs on controller load')
            console.log(mSrv.data);
        };

        initMyCtrl1();

    })

;

<强>#控制器2

angular.module('initMyCtrl2', ['myService'])

    .controller('InitMyCtrl2', function( $scope, mSrv ) {

        var initMyCtrl2 = function(){
            console.log('runs on controller load')
            console.log(mSrv.data);
        };

        initMyCtrl2();

    })

;