2016-10-11 247 views
0

我需要一个参数传送给控制器AngularJS - 传递变量给控制器

function config($routeProvider, $locationProvider) { 

    $routeProvider 

     .when('/url-1', { 
      parameter: 1 
     }) 

     .when('/url-2', { 
      parameter: 2 
     }) 

     .otherwise({ 
      redirectTo: '/url-1' 
     }); 

    $locationProvider.html5Mode({ 
     enabled: true, 
     requireBase: true 
    }); 
} 

这是我的控制器

function MyController(parameter) { 

    console.log(parameter); 

} 

,并在视图中我只有两个环节

<a ng-href="/url-1">url-1</a> 
<a ng-href="/url-2">url-1</a> 

我是否需要在$ routeProvider中指定控制器? 我只有一个控制器。我不是加载视图dinamically 我只需要做一个console.log(参数)基于$ routeProvider发送的参数

谢谢!

回答

0

这将是定义路由的好方法,假设你有100条路由,那么路由定义会增加到那个数字。而是多条路线具有单一的通用路线。

然后将控制器分配给可以访问$ routeParams API以获取路由中可用参数的路由。

配置

function config($routeProvider, $locationProvider) { 

    $routeProvider 
    .when('/url/:id', { 
     controller: MyController 
    }) 
    .otherwise({ 
     redirectTo: '/url/1' 
    }); 

    $locationProvider.html5Mode({ 
     enabled: true, 
     requireBase: true 
    }); 
} 

控制器

function MyController($routeParams) { 
    console.log($routeParams); 
} 

如果你不想把另一个控制器的各条路线,那么你可以通过把钩上routeChangeSuccess事件跟踪路由变化你的应用程序的内部运行块如下所示

app.run(function($rootScope, $routeParams) { 
    $rootScope.$on('routeChangeSuccess', function() { 
     console.log($routeParams); 
    } 
}); 

或者您可以在页面控制器中放置该事件。

function MyController($scope, $routeParams) { 
    console.log("Parameters on page load "+ $routeParams); 
    $scope.$on('$routeChangeSuccess', function(event, next, current) { 
     console.log($routeParams); 
    } 
} 
+0

我只有2条路线和i'm已经调用我的控制器在视图与 handsome

+0

遵循我建议的方法,因为它会更具可扩展性。所以现在如果你不想为每个路由分配控制器,你可以在'$ routeChangeSuccess'事件 –

+0

上挂钩,非常感谢你的建议。我不清楚为什么我需要为每个路由分配一个控制器,因为所有的URL都是相同的(也是唯一的)如果我已经在视图中调用了控制器。在$ routeProvider中做同样的效果是什么? – handsome

0
function config($routeProvider, $locationProvider) { 

$routeProvider 

    .when('/url-1', { 
     params: {id : 1} 
    }) 

    .when('/url-2', { 
     params: {id : 2} 
    }) 

    .otherwise({ 
     redirectTo: '/url-1' 
    }); 

$locationProvider.html5Mode({ 
    enabled: true, 
    requireBase: true 
}); 

}

function MyController($routeParams) { 
console.log($routeParams); 

}

+0

单击链接时,我看不到任何更改。 :( – handsome