Javascript 如何在angularjs UI路由器中为ng repeat中的项目路由到不同的URL,需要修改UI路由器中的状态
我正在使用UI路由器,我的html如下所示:Javascript 如何在angularjs UI路由器中为ng repeat中的项目路由到不同的URL,需要修改UI路由器中的状态,javascript,angularjs,angular-ui-router,angularjs-routing,Javascript,Angularjs,Angular Ui Router,Angularjs Routing,我正在使用UI路由器,我的html如下所示: <body ng-controller="myCtrl"> <h1>Hello Plunker!</h1> <ul> <li ng-repeat = "guy in guys"> <a ui-sref="person">{{guy}}{{$index+1}}</a> </li> </ul> </b
<body ng-controller="myCtrl">
<h1>Hello Plunker!</h1>
<ul>
<li ng-repeat = "guy in guys">
<a ui-sref="person">{{guy}}{{$index+1}}</a>
</li>
</ul>
</body>
有人能帮我解决这里需要填充的内容吗?我的目标是,单击File1应该打开file.html,单击file2应该打开file2.html
简言之,我的问题是,当单击ng repeat指令中重复的项目时,如何打开不同的文件/模板/部分,以及如何在UI路由器的状态下指定url参数
多谢
仅使用一条带有参数的管线:
.state("person", {
url: "/person/:file",
....
});
然后在模板控制器中,使用$stateParams获取文件参数,使用$http加载html内容,并将结果放入ng bind html标记属性中。仅使用一个带有参数的路由:
.state("person", {
url: "/person/:file",
....
});
然后在模板控制器中,使用$stateParams获取文件参数,使用$http加载html内容,并将结果放入ng bind html标记属性中。我创建了一个 州会是这样的:
.state('guy_route2', {
url: "/route/{index:int}",
templateProvider: function($templateRequest, $stateParams) {
var index = $stateParams.index + 1;
var templateName = 'file' + index + '.html';
return $templateRequest(templateName);
},
})
这将是一个机构:
<body ng-controller="myCtrl">
<ul>
<li ng-repeat = "guy in guys">
<a ui-sref="guy_route2({index: $index})">{{guy}}</a>
</li>
</ul>
<h3>Target for state</h3>
<div ui-view=""></div>
</body>
其中我们传递状态名'guy_route2',函数调用包含表示状态参数{index:$index}的对象
检查所有
templateProvider魔法详细信息可在此处找到:
扩展:
我会用收音机调整它
选中它我创建了一个
州会是这样的:
.state('guy_route2', {
url: "/route/{index:int}",
templateProvider: function($templateRequest, $stateParams) {
var index = $stateParams.index + 1;
var templateName = 'file' + index + '.html';
return $templateRequest(templateName);
},
})
这将是一个机构:
<body ng-controller="myCtrl">
<ul>
<li ng-repeat = "guy in guys">
<a ui-sref="guy_route2({index: $index})">{{guy}}</a>
</li>
</ul>
<h3>Target for state</h3>
<div ui-view=""></div>
</body>
其中我们传递状态名'guy_route2',函数调用包含表示状态参数{index:$index}的对象
检查所有
templateProvider魔法详细信息可在此处找到:
扩展:
我会用收音机调整它
选中它如中所述,我们甚至可以使用resolve
有
这可能是data.json
这些state def将使用该文件生成列表和详细信息。具有解析的父状态
.state('guys', {
url: "/route",
templateUrl:'guys.html',
controller:'listCtrl',
resolve: {
guys: ['$http', function($http){
return $http
.get("data.json")
.then(function(response){
return response.data;
})
}],
}
})
和由传递的id驱动的模板的子级:
.state('guy', {
parent: 'guys',
url: "/:id",
controller:'MyCtrl',
templateProvider: function($templateRequest, $stateParams) {
var index = $stateParams.id;
var templateName = 'file' + index + '.html';
return $templateRequest(templateName);
},
})
这应该说明如何使用带有resolve的UI路由器
.state('guys', {
url: "/route",
templateUrl:'guys.html',
controller:'listCtrl',
resolve: {
guys: ['$http', function($http){
return $http
.get("data.json")
.then(function(response){
return response.data;
})
}],
}
})
检查一下
另见
如中所述,我们可以使用“甚至解决”
有
这可能是data.json
这些state def将使用该文件生成列表和详细信息。具有解析的父状态
.state('guys', {
url: "/route",
templateUrl:'guys.html',
controller:'listCtrl',
resolve: {
guys: ['$http', function($http){
return $http
.get("data.json")
.then(function(response){
return response.data;
})
}],
}
})
和由传递的id驱动的模板的子级:
.state('guy', {
parent: 'guys',
url: "/:id",
controller:'MyCtrl',
templateProvider: function($templateRequest, $stateParams) {
var index = $stateParams.id;
var templateName = 'file' + index + '.html';
return $templateRequest(templateName);
},
})
这应该说明如何使用带有resolve的UI路由器
.state('guys', {
url: "/route",
templateUrl:'guys.html',
controller:'listCtrl',
resolve: {
guys: ['$http', function($http){
return $http
.get("data.json")
.then(function(response){
return response.data;
})
}],
}
})
检查一下
另见
如果你想观察类似的问题和解决方案@RadimKöhler你能在这里帮忙吗,我在上创建了一个演示版,当然,给我一些minutes@RadimKöhler:非常感谢,老兄,我想我解决了这个问题,但我不确定这是不是解决方法。更新我试图用更新和工作的plunker来表达这一切。。如果您希望观察类似的问题和解决方案,希望它能有所帮助@RadimKöhler你能在这里帮忙吗,我在上创建了一个演示版,当然,给我一些minutes@RadimKöhler:非常感谢,老兄,我想我解决了这个问题,但我不确定这是不是解决方法。更新我试图用更新和工作的plunker来表达这一切。。希望有帮助我认为你问了我同样的问题?然后在模板控制器中获得带有$stateParams的文件参数,用$http加载html内容,并将结果放入ng bind html标记属性。我认为你问了我同样的问题?然后在模板控制器中获得带有$stateParams的文件参数,用$http加载html内容,并将结果放在ng bind html标记属性中。谢谢你,我在这里添加了一些毫无意义的东西,我想将ui sref添加到单选按钮,而不是链接,虽然它可以工作,但收音机不会被检查,用{{guy}替换锚,希望你现在应该有答案;祝你在UI路由器上好运,但是为什么所有的3台收音机都被选中了呢?是的,我只是想尽快给你一个版本。。。这里更新了一个感谢好友,+1添加并接受。你做了什么来修复收音机被选中,全部3个最初感谢老兄,我这里有一些废话要添加,我想添加ui sref到单选按钮,而不是一个链接,虽然它可以工作,但收音机不会得到检查,用{{guy}替换锚,希望现在你应该有答案;祝你在UI路由器上好运,但是为什么所有的3台收音机都被选中了呢?是的,我只是想尽快给你一个版本。。。这里更新了一个感谢好友,+1添加并接受。你做了什么来修复被选中的收音机,所有3个最初感谢milllion buddy,但我只想要一个简单的部分来使用controller加载数据,我不想要文件1、文件2、文件3部分。单部分应该包含所有三条路线的数据;减少子状态功能不是问题。。这更像是一种奖励;那么,你有你的答案吗?这个解决方法:{}对你有用吗?只是不确定你的评论…谢谢,伙计,这真的很有帮助,但在$scope.gu中
y=$scope.guys[$stateParams.id];这家伙是什么?是ng repeat的状态还是数据?对不起,Mike,必须停在这里。我肯定不是免费的顾问;虽然唯一衡量答案是否有用的方法是投票和接受,但我能在这里补充的唯一/最后一件事是:如果我能提供更多细节,很高兴,请提出新问题。你会得到更多观众的关注。如果你得不到答案,我想我能帮你;-让我知道,分享一个链接。。。我确实想帮忙,但有一些结果;祝你好运,先生,谢谢milllion的一个朋友,但是我只想要一个简单的部分来使用controller加载数据,我不想要文件1,文件2,文件3部分。单部分应该包含所有三条路线的数据;减少子状态功能不是问题。。这更像是一种奖励;那么,你有你的答案吗?这个解决方法:{}对你有用吗?只是不确定你的评论…谢谢,伙计,这真的很有帮助,但是在$scope.guy=$scope.guys[$stateParams.id];这家伙是什么?是ng repeat的状态还是数据?对不起,Mike,必须停在这里。我肯定不是免费的顾问;虽然唯一衡量答案是否有用的方法是投票和接受,但我能在这里补充的唯一/最后一件事是:如果我能提供更多细节,很高兴,请提出新问题。你会得到更多观众的关注。如果你得不到答案,我想我能帮你;-让我知道,分享一个链接。。。我确实想帮忙,但有一些结果;祝你好运,先生