【ionic+angularjs】angularjs ui-router路由简介($urlRouter、$state、$stateProvider、ui-sref....)
25-02-26
12
对于【ionic+angularjs】angularjsui-router路由简介感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解$urlRouter、$state、$stateProvid
对于【ionic+angularjs】angularjs ui-router路由简介 感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解$urlRouter、$state、$stateProvider、ui-sref.... ,并且为您提供关于Angular UI-Router $ urlRouterProvider。不工作时*不再*、Angular UI-Router $ urlRouterProvider。单击时不起作用、Angular UI-Router $ urlRouterProvider不工作时*不再*、Angular UI-Router $ urlRouterProvider单击时不起作用 的宝贵知识。
本文目录一览:
【ionic+angularjs】angularjs ui-router路由简介($urlRouter、$state、$stateProvider、ui-sref....) 原文出处:http://www.cnblogs.com/ys-ys/p/5052660.html?utm_source=tuicool&utm_medium=referral
之前有写过一篇关于Angular自带的路由:ngRoute。今天来说说Angular的第三方路由:ui-router。那么有人就会问:为什么Angular有了自带的路由,我们还需要用ui-router呢?这里简单明了的说明下ngRoute和ui-router的区别吧,其实也没很大的区别,主要的就是ngRoute针对于单视图,而ui-router可用于多视图(这里说的视图是指在页面内我们可控制的,可变化的区域)。比如:
我们点击了一个link,我们需要在视图中跳转到指定的一个页面,那么ngRoute已经满足了我们的需求,而当我们点击的时候,需要在分别在不同的地方跳转两个不同的页面的时候,ngRoute就不够用了,我们就需要用到ui-router。 这里我们还是先来学习下ui-router(一些简单的服务和用法)
ui-router
$urlRouterProvider $urlRouterProvider负责监听$location.当$location变化的时候,$urlRouterProvider开始在一个规则的列表中一个个的查找,直到找到匹配的值。$urlRouterProvider用于在后端指定url的状态配置。所有的url被编译成UrlMatcher对象。 依赖 : $urlMatcherFactoryProvider $locationProvider 方法 : deferIntercept(defer); 禁用(或启用)延迟location变化的拦截。如果你想定制与URL同步的行为(例如,你需要保持当前的URL去并且推迟一个变化),那么在配置的时候使用这个方法。 参数 : defer:boolean,确定是禁止还是启用该拦截。 代码:
angular.module('Demo',['ui.router'])
.config([ "$urlRouterProvider",function (){
$urlRouterProvider.deferIntercept(defer); // defer = true/false
}])
这是源码部分:
this .deferIntercept = function (defer) {
if (defer === undefined) defer = true ;
interceptDeferred = defer; 默认是true
};
otherwise(rule); 定义一个当请求的路径是无效路径时跳转的路径。 rule:你想重定向的url路径或一个返回的网址路径的规则函数。函数传入两个参数:$injector和$location服务,而且必须返回一个string的url。 代码:
function(){
$urlRouterProvider.otherwise(rule); rule = 重定向的url规则
}])
rule(rule); 定义使用$urlRouterProvider 来匹配指定的URL的规则。 参数 : rule:将$injector和$location作为arguments传入的处理函数。用来返回一个string类型的url路径。 代码:
angular.module('Demo',255); line-height:1.5!important">function($urlRouterProvider){
$urlRouterProvider.rule( function ($injector,$location) {
var path = $location.path(),normalized = path.toLowerCase();
if (path !== normalized) {
return normalized;
}
});
}])
when(what,handler); 为给定的URL匹配注册一个处理程序。 参数 : what:需要重定向的传入路径。 handler:你想要重定向的路径/处理程序。 代码:
]);
.config(["$urlRouterProvider",255); line-height:1.5!important">function ($urlRouterProvider) {
$urlRouterProvider.when($state.url, function ($match,$stateParams) {
if ($state.$current.navigable !== state || !equalForKeys($match,$stateParams) {
$state.transitionTo(state,$match,255); line-height:1.5!important">false );
}
});
}]);
$urlRouter 依赖 :$location $rootScope $injector $browser 方法 : href(urlMacther,params,options); 一个生成URL的方法,为给定的UrlMatcher返回编译后的URL,并且用提供的参数填充。 参数 : urlMacther:用于当作生成URL的模板的UrlMacther对象。 params:一个参数值的对象用来填补所需的匹配参数。 options:option对象,absolute-boolean,如果为true,将会生成一个绝对地址。 代码:
$bob = $urlRouter.href(new UrlMatcher("/about/:person"),{
person: "bob"
});
$bob == "/about/bob";
sync();
sync(); 触发更新:发生在地址栏URL变化时执行相同的更新。
$state $state服务负责代表状态及提供状态之间的转换。它还提供你当前的状态及上一个状态。 依赖 :$rootScope $q $view $injector $resolve $stateParams $urlRouter 方法 : get(stateOrName,context); 返回任何指定的状态或所有状态的配置对象。 参数 : stateOrName:如果提供此参数,返回的是指定状态的配置对象;如果不提供此参数,则返回全部状态的配置对象。 context:当context是一个相对的参考状态,状态会在相关上下文中检索。
方法 :
go(to,options); 参数 : to:string,即将跳转的状态。 params:object,跳转所带的参数。 options:object,可选配置对象。有 location(是否更新地址栏的url,或以什么字符串替换url),inherit(是否继承当前url的参数),relative(当变化相对路径:如"^,定义的状态是相对的),notify(是否广播$stateChangeStart和$stateChangeSuccess事件),reload(是否重新载入)。 代码:
$state.go( 'contact.detail');
href(stateOeName,options); 一个URL生成方法,返回为给定的状态填充指定的参数编译后的链接。 参数 : stateOeName:string,你想要生成的url的状态或者状态对象。 params:object,一个用于填充状态需要的参数的对象。 options:可选配置对象。有lossy(当第一个参数url未被提供时是否继承导航的url进行构建href),inherit(是否继承当前url的参数),relative(当变化相对路径:如"^,定义的状态是相对的),absolute(是否生成绝对url)。 代码:
$state.href("about.person",{ person: "bob" })
include(stateOrName,options); 一个确定当前有效的状态是不是与stateOrName平级的还是其子状态。 参数 : stateOeName:string,部分名称,相对名称,或者通过当前状态进行全局模式查找。 params:object,一个参数对象。 options:可选配置对象。有relative。 代码:
<div ng-class ="{highlighted:$state.includes('.item')}" > Item</ div >
$state.$current.name = 'contacts.details.item';
$state.includes( "contacts"); true
$state.includes("contacts.details"); true
$state.includes("contacts.details.item"); true
$state.includes("contacts.list"); false
$state.includes("about"); false
全局模式:
$state.$current.name = 'contacts.details.item.url';
$state.includes( "*.details.*.*"); true
$state.includes("*.details.**"); true
$state.includes("**.item.**"); true
$state.includes("*.details.item.url"); true
$state.includes("*.details.*.url"); true
$state.includes("*.details.*"); false
$state.includes("item.**"); false
is(stateOrName,options); 与$state.include相似,只是这个针对的是全名。参数性质同上。 代码:
="{highlighted: $state.is('.item')}"
$state.$current.name = 'contacts.details.item';
$state.is( 'contact.details.item'); true
$state.is(contactDetailItemStateObject); true
reload(state); 重新载入当前状态的方法。 参数 : state:一个状态名称或者状态对象。 代码:
$state.reload('contact.detail');
transitionTo(to,toParams,options); 过渡到一个新状态的方法。 参数 : to:状态名称。 toParams:将会发送到下一个状态的参数。 options:可选参数。有location,inherit,relative,notify,reload。 代码:
$state.transitionTo($state.current,$stateParams,{
reload: true ,inherit: false ,notify: true
});
事件 : $stateChangeError 路由状态变化发生错误时触发的事件。参数有:event,toState,toParams,fromState,fromParams,error。以上根据字面意思即可理解,哈哈。 $stateChangeStart 路由状态变化发生前触发的事件。参数有:event,toState,toParams,fromState,fromParams。 $stateChangeSuccess 路由状态变化正确时触发的事件。参数有:event,toState,toParams,fromState,fromParams。 $stateNotFound 路由状态没找到的时候触发的事件。参数有:event,unfoundState,fromState,fromParams。
$stateProvider 处理路由状态的服务,路由的状态反映了该项在应用程序中的位置,描述了在当前状态下UI是应该怎么样的,并且该做什么。
依赖 :$urlRouterProvider $urlMatcherFactoryProvider 方法 : decorator(name,func); 通过内部的$stateProvider以扩展或者重写状态生成器。可用于添加ui-router的自定义功能,例如,基于状态名称推断templateUrl。 警告:因为生成器的函数执行顺序的不确定,decorator不应该相互依赖。 参数: name:需要修改的生成函数名称。 func:负责修改生成器函数的函数。 代码:
$stateProvider.decorator('views',255); line-height:1.5!important">function (state,parent) {
var result = {},views = parent(state);
angular.forEach(views,255); line-height:1.5!important">function (config,name) {
var autoName = (state.name + '.' + name).replace('.','/');
config.templateUrl = config.templateUrl || '/partials/' + autoName + '.html';
result[name] = config;
});
return result;
});
$stateProvider.state( 'home',{
views: {
'contact.list': { controller: 'ListController' }, 'contact.item': { controller: 'ItemController' }
}
});
$state.go( 'home');
以上代码修饰了“views”直接通过state的名称绑定完对应的页面模板。 state(name,stateConfig); 注册一个状态,并给定其配置。 参数 : name:状态的名称。 stateConfig:状态配置对象。配置具有以下各项属性: template: string/function,html模板字符串,或者一个返回html模板字符串的函数。 templateUrl:string/function,模板路径的字符串,或者返回模板路径字符串的函数。 templateProvider:function,返回html模板字符串或模板路径的服务。 controller:string/function,新注册一个控制器函数或者一个已注册的控制器的名称字符串。 controllerProvider:function,返回控制器或者控制器名称的服务 controllerAs:string,控制器别名。 parent:string/object,手动指定该状态的父级。 resolve:object,将会被注入controller去执行的函数,<string,function>形式。 url:string,当前状态的对应url。 views:object,视图展示的配置。<string,object>形式。 abstract:boolean,一个永远不会被激活的抽象的状态,但可以给其子级提供特性的继承。默认是true。 onEnter:function,当进入一个状态后的回调函数。 onExit:function,当退出一个状态后的回调函数。 reloadOnSearch:boolean,如果为false,那么当一个search/query参数改变时不会触发相同的状态,用于当你修改$location.search()的时候不想重新加载页面。默认为true。 data:object,任意对象数据,用于自定义配置。继承父级状态的data属性。换句话说,通过原型继承可以达到添加一个data数据从而整个树结构都能获取到。 params:url里的参数值,通过它可以实现页面间的参数传递。
ui-sref 一种将链接(<a>标签)绑定到一个状态的指令。点击该链接将触发一个可以带有可选参数的状态转换。 代码:
a ui-sref ="app.index" > 首页a >
<!-- 这里是正常的跳转 -->
="app.index({id:yourId})" > 你的主页 这里是带参数对象的跳转,名称是id,值是yourId -->
简单的使用代码(ui-router的单视图):
ng-app ="Demo" ng-controller ="testCtrl as ctrl" >
ol li >< ="app" > app></ ="test" > test>
ui-view script type ="text/ng-template" id ="'page1.html'" >
this is page 1 for app.
script ="'page3.html'" test.
>
])
.config(["$stateProvider","$urlRouterProvider",routeConfig])
.controller( "testCtrl",angular.noop)
function routeConfig($stateProvider,$urlRouterProvider){
$urlRouterProvider.otherwise( "/app");
$stateProvider
.state( "app",{
url: "/app",templateUrl: "'page1.html'"
})
.state( "test",{
url: "/test",templateUrl: "'page3.html'"
})
}
使用代码(ui-router的多视图):
="app.page1"
="test.page1({id:1})" ="'layout.html'" < div ui - view = " nav@ >< / div>
div>
="'nav1.html'" ol >
li a ui sref app.page1 > a>< app.page2 li
ol>
="'nav2.html'" test.page1({id:1}) test.page1 test.page2 >
="'page2.html'" 2 ="'page4.html'" );
$stateProvider
.state("app",{
url: "/app",views:{
"":{
templateUrl: "'layout.html'"
}, "nav":{
templateUrl: "'nav1.html'"
}
}
})
.state( "app.page1",{
url: "/page1",templateUrl: "'page1.html'"
})
.state( "app.page2",{
url: "/page2",templateUrl: "'page2.html'"
})
.state( "test",{
url: "/test",views:{
"":{
templateUrl: "'layout.html'"
}, "nav":{
templateUrl: "'nav2.html'"
}
}
})
.state( "test.page1",{
url: "/page1?:id",templateUrl: "'page3.html'",controller:[ "$stateParams",255); line-height:1.5!important">function($stateParams){
console.log($stateParams.id); 1 这里实现传参
}],params:{
id: null
}
})
.state( "test.page2",templateUrl: "'page4.html'"
})
}
注意:需要引入angular-ui-router[.min].js
Angular UI-Router $ urlRouterProvider。不工作时*不再* 问: 为什么不能在.when()
我的$urlRouterProvider
工作了吗?
我选择了一个相当强大的角度应用程序。我一直试图解决的最新问题是“页面刷新时丢失的用户凭据”问题。
当我拿起项目的auth服务时,并没有多大意义,在深入研究后,我发现它是从几页随机代码中组合而成的。它也不能完全正常工作,因此我研究了不同的来源,并决定完全实现其中之一(angular-client-side-auth)
现在,我实现的身份验证服务/控制器与 angular-client-side-auth 基本上相同,但是我正在工作的站点使用基于令牌的身份验证。令牌功能基本上已经就位,因此我可以轻松使用它。
在这一点上,我已经使用户保持刷新状态登录,路由正在与它们的身份验证一起使用(以前使用大容量代码来禁用视图中的元素),但是现在$urlRouterProvider.when()
s已损坏。他们以前工作得非常好,所以我知道我做过的事情就是要犯错-但我不能简单地撤消已实现的事情!
这是我正在使用的$ urlRouterProvider代码。值得一提的是,我已经包含/需要了.when()
,而angular-client-side-auth似乎并没有使用它们。我希望它们可以用该代码实现,但是可能其中有些东西使.when()
?的功能无效。我不这么认为。可能还需要澄清,我还没有使用.rule
或$httpProvider.interceptors
。我尝试使用已实现这些功能的网站,但它们似乎没有什么不同。
$urlRouterProvider .when(''/myState/group'', [''$state'', ''myService'', function ($state, myService) { $state.go(''app.myState.group.id'', {id: myService.Params.id}); }]) .otherwise(''/'');
因此,基本上,如果用户或站点将用户定向到/myState/group
,则他们实际上应该以状态app.myState.group.id
正确的URL结尾?他们没有,但我不知道为什么。关于使用urlRouterProvider的问题并没有太多。
什么 没有 发生?好了,/myState/group
加载视图很好,并且在其中<ui-view>
是生成的列表id
。您可以单击一个ID,该ID会调用一个函数,该函数设置ID然后执行$state.go(''app.myState.group.id'',{id: group.id, std: $scope.std1});
。当然,该状态将替换用户单击的“生成列表”。
现在,对于.state()
…
.state(''app.myState'', { abstract: true, url: ''/myState'', templateUrl: ''views/myState.html'', data: { access: access.user }, controller: ''MyCtrl'', resolve: { // bunch of stuff here, I''ll include it if it''s relevant }, redirectMap: { ''409'': ''app.error'' } }) .state(''app.myState.group'', { url: ''/group'', templateUrl: ''views/myState.group.html'', data: { access: access.user } }) .state(''app.myState.group.id'', { url: ''/:id'', templateUrl: ''views/myState.group.id.html'', data: { access: access.user }, resolve: { '''': function (myService) { myService.stuff.get(false, false, 7, 0).then(function (data) { }); } }, controller: ''MygroupidCtrl'' })
最后, index.html
<li ng-> <a ui-sref="app.myState.group">My State</a> </li>
不知何故,我觉得有一种更好的方法来构造它。据我所知,app.myState.group
实际上并不需要 它 ,它只是嵌套的一部分。
我试图将更ui-sref
改为="app.myState.group.id"
。如果那没用,我也改成$state.includes(''app.myState'')}
了$state.includes(''app.myState.group'')}
。不。这可行吗?我知道我必须以某种方式传递ID,但似乎并没有指示。
理想情况下,我想限制不必要状态的数量(以及控制器..以及所有内容)。由于用户应该/myState/group/id
在单击链接时直接被带到,因此我认为那应该发生。这不是链接到另一个状态,然后重定向!
就是说,我更关心现在只是使它工作,而以后我会担心清理。
编辑
因此,当我写问题时,我对尝试的事情有了更多的想法。其中之一实际有效!
.state(''app.myState.group'', { url: ''/group'', templateUrl: ''views/myState.group.html'', data: { access: access.user }, onEnter: [''$state'', ''$timeout'', ''myService'', function ($state, $timeout, myService) { $timeout(function () { $state.go(''app.myState.group.id'', {id: myService.Params.id}) }, 1000); }]
我喜欢它,尽管我仍然想知道是否还有其他方法可以做到这一点。我也很好奇为什么$ urlRouterProvider停止工作!
答案1 小编典典 编辑:版本0.2.13-重大更改
原始帖子正在使用UI-Router 0.2.12-。0.2.13中的修复程序禁用了此解决方案。请在此处遵循解决方法:
Angular UI-Router $ urlRouterProvider。当我单击时不起作用 原版的:
我发现有一个问题,引起了类似的问题。有一个带有完整代码的有效示例
首先,让我们有两个功能来配置
$urlRouterProvider
和 $stateProvider
这些定义的摘要:
// when config for $urlRouterProvidervar whenConfig = [''$urlRouterProvider'', function($urlRouterProvider) { $urlRouterProvider .when(''/app/list'', [''$state'', ''myService'', function ($state, myService) { $state.go(''app.list.detail'', {id: myService.Params.id}); }]) .otherwise(''/app'');}];// state config for $stateProvidervar stateConfig = [''$stateProvider'', function($stateProvider) { $stateProvider .state(''app'', { url: ''/app'', ...}];
有了这个,如果我们这样称呼他们,举报的行为就会停顿:
angular.module(''MyApp'', [ ''ui.router''])// I. firstly the states.config(stateConfig)// II. then the WHEN.config(whenConfig)
上面的调用将不起作用。访问列表时,何时将不会触发详细信息状态。
但这将按预期工作:
angular.module(''MyApp'', [ ''ui.router''])// I. firstly WHEN.config(whenConfig) // II. only then call state config.config(stateConfig)
在这里检查。查看 app.js
文件…
简介:我们只需要首先配置$urlRouterProvider
。只有这样我们才能开始通过填写我们的州$stateProvider
。这种方法将导致预期的行为。
Angular UI-Router $ urlRouterProvider。单击时不起作用 我.when(''/center'', ''/center/question'')
在我的角度web应用程序。
当我''/center''
在浏览器中键入内容时,它会重定向到''/center/question''
我期望的位置,但是当我单击时<aui-sref="center" href="#/center"></a>
,它不会重定向,而是停留在url上''/center''
。
我的控制台没有错误,我也不知道为什么。
当不再工作时 我在这里看到了一个类似的问题AngularUI-Router$urlRouterProvider。我尝试了答案,但它仍然对我不起作用。
这是我的coffeescript代码:
whenConfig = [''$urlRouterProvider'', ($urlRouterProvider) -> # default url config $urlRouterProvider .otherwise ''/center'' .when ''/center'', ''/center/question'']stateConfig = [''$stateProvider'', ($stateProvider) -> # nested url config capitalize = (s)-> s[0].toUpperCase() + s[1..] mainConfig = ({ name: name url: "/#{name}" templateUrl: "templates/#{name}.html" controller: "#{capitalize name}Ctrl" } for name in [''center'', ''keywordList'', ''keywordConfig'', ''log'', ''stat'']) centerConfig = ({ name: "center.#{name}" url: "/#{name}?page" templateUrl: "templates/center/#{name}.html" controller: "Center#{capitalize name}Ctrl" resolve: thead: (CenterService) -> CenterService.getThead @self.name data: (CenterService, $stateParams) -> CenterService.fetchItems @self.name, $stateParams.page } for name in [''question'', ''answer'', ''comment'', ''article'']) for singleConfig in mainConfig $stateProvider.state singleConfig for childConfig in centerConfig $stateProvider.state childConfig]app.config whenConfigapp.config stateConfig
答案1 小编典典 先前的解决方案 在0.2.12-我们可以使用的版本之前$urlRouterProvider.when(),在文档中建议使用(小引用):
如何:设置默认/索引子状态 … 如果您希望’parent.index’网址为非空,请使用$ urlRouterProvider在module.config中设置重定向:
$urlRouterProvider.when(''/home'', ''/home/index'');
因此,这是上述问答中显示的解决方案:
var whenConfig = [''$urlRouterProvider'', function($urlRouterProvider) { $urlRouterProvider .when(''/app/list'', [''$state'', ''myService'', function ($state, myService) { $state.go(''app.list.detail'', {id: myService.Params.id}); }]) .otherwise(''/app'');}];...app.config(whenConfig)
现在-我们不能。
UI路由器“ FIX”在 0.2.13 这是由于在版本0.2.13中提到的“ FIX” (我根本不确定)
Bug修复$状态: - ...... -从URL避免重新同步后.transitionTo(b267ecd3,关闭#1573)
这是urlRouter.js中添加的新代码:
if (lastPushedUrl && $location.url() === lastPushedUrl) // this line stops the corrent .when to work return lastPushedUrl = undefined;lastPushedUrl = undefined;
这段代码正在优化/修复其他问题 ……而且,关闭了.when()功能
解 如前所述,这个全新的插件提供了0.2.13+版本的方法。我们只需要听状态更改,如果状态为“ app.list”,我们可以使用一些ID来详细了解它。
var onChangeConfig = [''$rootScope'', ''$state'', function ($rootScope, $state) { $rootScope.$on(''$stateChangeStart'', function (event, toState) { if (toState.name === "app.list") { event.preventDefault(); $state.go(''app.list.detail'', {id: 2}); } });}]
Angular UI-Router $ urlRouterProvider不工作时*不再*
问: 为什么不能在.when()
我的$urlRouterProvider
工作了吗?
我选择了一个相当强大的角度应用程序。我一直试图解决的最新问题是“页面刷新时丢失的用户凭据”问题。
当我拿起项目的auth服务时,并没有多大意义,在深入研究后,我发现它是从几页随机代码中组合而成的。它也不能完全正常工作,因此我研究了不同的来源,并决定完全实现其中之一(angular-client-side-auth)
现在,我实现的身份验证服务/控制器与 angular-client-side-auth
基本上相同,但是我正在工作的站点使用基于令牌的身份验证。令牌功能基本上已经就位,因此我可以轻松使用它。
在这一点上,我已经使用户保持刷新状态登录,路由正在与它们的身份验证一起使用(以前使用大容量代码来禁用视图中的元素),但是现在$urlRouterProvider
.when()
s已损坏。他们以前工作得非常好,所以我知道我做过的事情就是要犯错-但我不能简单地撤消已实现的事情!
这是我正在使用的$ urlRouterProvider代码。值得一提的是,我已经包含/需要了.when()
,而angular-client-side-auth似乎并没有使用它们。我希望它们可以用该代码实现,但是可能其中有些东西使.when()
?的功能无效。我不这么认为。可能还需要澄清,我还没有使用.rule
或$httpProvider.interceptors
。我尝试使用已实现这些功能的网站,但它们似乎没有什么不同。
$urlRouterProvider
.when('/myState/group',['$state','myService',function ($state,myService) {
$state.go('app.myState.group.id',{id: myService.Params.id});
}])
.otherwise('/');
因此,基本上,如果用户或站点将用户定向到/myState/group
,则他们实际上应该以状态app.myState.group.id
正确的URL结尾?他们没有,但我不知道为什么。关于使用urlRouterProvider的问题并没有太多。
什么 没有 发生?好了,/myState/group
加载视图很好,并且在其中<ui-view>
是生成的列表id
。您可以单击一个ID,该ID会调用一个函数,该函数设置ID然后执行$state.go('app.myState.group.id',{id: group.id,std: $scope.std1});
。当然,该状态将替换用户单击的“生成列表”。
现在,对于.state()
…
.state('app.myState',{
abstract: true,url: '/myState',templateUrl: 'views/myState.html',data: {
access: access.user
},controller: 'MyCtrl',resolve: {
// bunch of stuff here,I'll include it if it's relevant
},redirectMap: {
'409': 'app.error'
}
})
.state('app.myState.group',{
url: '/group',templateUrl: 'views/myState.group.html',data: {
access: access.user
}
})
.state('app.myState.group.id',{
url: '/:id',templateUrl: 'views/myState.group.id.html',resolve: {
'': function (myService) {
myService.stuff.get(false,false,7,0).then(function (data) {
});
}
},controller: 'MygroupidCtrl'
})
最后, index.html
<li ng-> <a ui-sref="app.myState.group">My State</a> </li>
不知何故,我觉得有一种更好的方法来构造它。据我所知,app.myState.group
实际上并不需要 它 ,它只是嵌套的一部分。
我试图将更ui-sref
改为="app.myState.group.id"
。如果那没用,我也改成$state.includes('app.myState')}
了$state.includes('app.myState.group')}
。不。这可行吗?我知道我必须以某种方式传递ID,但似乎并没有指示。
理想情况下,我想限制不必要状态的数量(以及控制器..以及所有内容)。由于用户应该/myState/group/id
在单击链接时直接被带到,因此我认为那应该发生。这不是链接到另一个状态,然后重定向!
就是说,我更关心现在只是使它工作,而以后我会担心清理。
编辑
因此,当我写问题时,我对尝试的事情有了更多的想法。其中之一实际有效!
.state('app.myState.group',onEnter: ['$state','$timeout',$timeout,myService) {
$timeout(function () {
$state.go('app.myState.group.id',{id: myService.Params.id})
},1000);
}]
我喜欢它,尽管我仍然想知道是否还有其他方法可以做到这一点。我也很好奇为什么$ urlRouterProvider停止工作!
Angular UI-Router $ urlRouterProvider单击时不起作用
我.when('/center','/center/question')
在我的角度web应用程序。
当我'/center'
在浏览器中键入内容时,它会重定向到'/center/question'
我期望的位置,但是当我单击时<aui-sref="center" href="#/center"></a>
,它不会重定向,而是停留在url上'/center'
。
我的控制台没有错误,我也不知道为什么。
当不再工作时 我在这里看到了一个类似的问题AngularUI-Router$urlRouterProvider。我尝试了答案,但它仍然对我不起作用。
这是我的coffeescript代码:
whenConfig = ['$urlRouterProvider',($urlRouterProvider) ->
# default url config
$urlRouterProvider
.otherwise '/center'
.when '/center','/center/question'
]
stateConfig = ['$stateProvider',($stateProvider) ->
# nested url config
capitalize = (s)->
s[0].toUpperCase() + s[1..]
mainConfig = ({
name: name
url: "/#{name}"
templateUrl: "templates/#{name}.html"
controller: "#{capitalize name}Ctrl"
} for name in ['center','keywordList','keywordConfig','log','stat'])
centerConfig = ({
name: "center.#{name}"
url: "/#{name}?page"
templateUrl: "templates/center/#{name}.html"
controller: "Center#{capitalize name}Ctrl"
resolve:
thead: (CenterService) ->
CenterService.getThead @self.name
data: (CenterService,$stateParams) ->
CenterService.fetchItems @self.name,$stateParams.page
} for name in ['question','answer','comment','article'])
for singleConfig in mainConfig
$stateProvider.state singleConfig
for childConfig in centerConfig
$stateProvider.state childConfig
]
app.config whenConfig
app.config stateConfig
今天关于【ionic+angularjs】angularjs ui-router路由简介 和$urlRouter、$state、$stateProvider、ui-sref.... 的介绍到此结束,谢谢您的阅读,有关Angular UI-Router $ urlRouterProvider。不工作时*不再*、Angular UI-Router $ urlRouterProvider。单击时不起作用、Angular UI-Router $ urlRouterProvider不工作时*不再*、Angular UI-Router $ urlRouterProvider单击时不起作用 等更多相关知识的信息可以在本站进行查询。