ui-router参数传递

基本参数:

‘/user/:id‘

‘/user/{id}‘

‘/user/{id:int}‘

使用正则表达式:

‘/user/{id:[0-9]{1,8}‘

‘/user/{id:.*}‘

‘/user/*id

匹配所有以user开始的url 并将剩余参数传给id

多个参数:

‘/user?id1&id2‘

$StateParams service

// If you had a url on your state of:
url: ‘/users/:id/details/{type}/{repeat:[0-9]+}?from&to‘

// Then you navigated your browser to:
‘/users/123/details//0‘

// Your $stateParams object would be
{ id:‘123‘, type:‘‘, repeat:‘0‘ }

// Then you navigated your browser to:
‘/users/123/details/default/0?from=there&to=here‘

// Your $stateParams object would be
{ id:‘123‘, type:‘default‘, repeat:‘0‘, from:‘there‘, to:‘here‘ }

$StateParams仅包含注册在当前状态下的参数,不包含其他状态下的参数,即使是上级的url参数也获取不到

$stateProvider.state(‘contacts.detail‘, {
   url: ‘/contacts/:contactId‘,
   controller: function($stateParams){
      $stateParams.contactId  //*** Exists! ***//
   }
}).state(‘contacts.detail.subitem‘, {
   url: ‘/item/:itemId‘,
   controller: function($stateParams){
      $stateParams.contactId //*** Watch Out! DOESN‘T EXIST!! ***//
      $stateParams.itemId //*** Exists! ***//
   }
})

若想让下级获取到当前状态的参数,需使用resolve()。该函数会在画面渲染出来前先执行完成。

$stateProvider.state(‘contacts.detail‘, {
   url: ‘/contacts/:contactId‘,
   controller: function($stateParams){
      $stateParams.contactId  //*** Exists! ***//
   },
   resolve:{
      contactId: [‘$stateParams‘, function($stateParams){
          return $stateParams.contactId;
      }]
   }
}).state(‘contacts.detail.subitem‘, {
   url: ‘/item/:itemId‘,
   controller: function($stateParams, contactId){
      contactId //*** Exists! ***//
      $stateParams.itemId //*** Exists! ***//
   }
})

1 ui-sref、$state.go 的区别

ui-sref 一般使用在 <a>...</a>;

<a ui-sref="message-list">消息中心</a>

$state.go(‘someState‘)一般使用在 controller里面;

.controller(‘firstCtrl‘, function($scope, $state) {
      $state.go(‘login‘);
 });

这两个本质上是一样的东西,我们看ui-sref的源码:

...
element.bind("click", function(e) {
    var button = e.which || e.button;
    if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr(‘target‘)) ) {

      var transition = $timeout(function() {
        // HERE we call $state.go inside of ui-sref
        $state.go(ref.state, params, options);
      });

ui-sref最后调用的还是$state.go()方法

2 如何传递参数

首先,要在目标页面定义接受的参数:

传参,

ui-sref:

$state.go:

接收参数,

在目标页面的controller里注入$stateParams,然后 "$stateParams.参数名" 获取

分类: javascript

时间: 2024-10-04 18:29:51

ui-router参数传递的相关文章

Angularjs中UI Router全攻略

摘自:Angularjs中UI Router全攻略 温馨提示:想要了解 angular-ui-router的同学,从上往下读一遍,能带随着coding那就更好了,保证你对angular-ui-router基本全部掌握. 如何引用依赖angular-ui-router angular.module('app',["ui.router"]) .config(function($stateProvider){ $stateProvider.state(stateName, stateCofi

ngRoute 和 ui.router 的使用方法和区别

在单页面应用中要把各个分散的视图给组织起来是通过路由机制来实现的.本文主要对 AngularJS 原生的 ngRoute 路由模块和第三方路由模块 ui.router 的用法进行简单介绍,并做一个对比. ngRoute 使用方法 1) 引入 angular-route lib 无论是 ngRoute 还是 ui.router ,作为框架额外的附加功能,都必须以 模块依赖 的形式被引入. 1 <script src="lib/angular-route.js"></sc

angular : $location &amp; $state(UI router)的关系

次序:angular 的 location会先跑 $rootScope.$on("$locationChangeStart", function (scope, newUrl, oldUrl) { log("$locationChangeStart from " + oldUrl) log("$locationChangeStart to " + newUrl) }); 接着是 ui router $state $rootScope.$on(&q

Angularjs中UI Router用法小记录

今天自己参考已有的项目代码学习了下UI Router的用法,写了个小demo,验证了下自己的想法,现把使用情况记录一下. 1.入口文件index.html,引入项目所需的js文件,标注ng-app,创建ui-view元素,为后面的嵌套做容器准备. <!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <meta charset="UTF-8">

[转]AngularJS 使用 UI Router 实现表单向导

本文转自:http://www.oschina.net/translate/angularjs-multi-step-form-using-ui-router 今天我们将使用AngularJs和伟大的UI Router以及Angular ngAnimate module创建一个带动画的多步表单.这项技术可以用在你想要简化用户操作的大表单上. 我们看到这项技术已经应用在了许多的网页上.比如购物车,注册表单,入职流程以及许多多步表单,让用户更容易在线填写表单. 下面我们将构建它: 使用UI Rout

angular 的ui.router 定义不同的state 对应相同的url

Angular UI Router: Different states with same URL? The landing page of my app has two states: home-public, home-logged-in. Now I want to show both states on the same URL, but let the controller and template depend on the user session (is the user log

ui router 介绍

1. 路由规则 rap框架页面路由基于ui-router实现 1.1 ui-router 一个基本的路由状态如下所示: 路由配置: $stateProvider .state('po',{ url:'/po', abstract:false, templateUrl:'./pages/master.html', resolve:{ deps:"i am a test" }, controller:'po_controller' }) 前台界面: <div ui-view>&

ui router digest 10 time

refer : https://github.com/angular-ui/ui-router/issues/600 $urlRouterProvider.when("/", "/companys") redirect to companys 时,如果被 onStateChange 拦截并且 preventDefault() + $state.go('otherState'), otherState有使用 templateUrl 需要异步加载的话,那么就会出现这个

AngularJS学习之 ui router

1.安装 bower install --save angular_ui-router 2.在项目主页面 index.html中添加 <div ui-view=""></ui-view>/*login页面,dashboard.html将会嵌入此处*/ 3.在app.js页面设置 .config(function ($stateProvider,$urlRouterProvider) { $urlRouterProvider.otherwise('/login')

Angularjs ui router,路由嵌套 父controller执行问题

路由路径设置:structured.text   :structured是第一层路由,text是第二层路由: 问题如下,当$state.transitionTo路由到第二层是,structured的controller也会执行一次,导致页面控件重新加载刷新. $state.transitionTo( "structured.text", { args : $stateParams }, { reload: false} ); 查了github看到 https://github.com/