我正在使用ui.router。我需要将id传递给控制器,以在详细页面上显示一个人。我已经能够将ID传递给控制器,但我不确定如何继续...
我想做一些像SELECT * FROM PEOPLE WHERE personID = $ stateParams.personID //抱歉使用SQL / Angular mashup,但我想你会理解我的意思。
有人能指出我正确的方向吗?
<a ui-sref="person({personID:{{people.people}}})" href="">
和控制器..
myApp.controller('peopleCtrl', ['$scope', '$stateParams', function( $scope, $stateParams )
{
// This outputs the id as expected for instance 1
console.log($stateParams.personID);
$scope.people =
[
{
"personID":1,
"firstName": "A",
"lastName": "Grem"
},
{
"personID":2,
"firstName": "B",
"lastName": "Grem"
},
{
"personID":3,
"firstName": "C",
"lastName": "Grem"
},
{
"personID":4,
"firstName": "D",
"lastName": "Grem"
},
];
}]);
答案 0 :(得分:1)
这是了解结果的最佳时机。
解决在加载状态之前执行的函数。 Resolve可以返回一个promise,例如$ http调用。可以使用解析名称将promise的结果注入您的控制器。
也可以注入决心。在这里,我注入$ stateParams来获取你的personID参数。使用param,我从REST api中获取人员数据。最后,当http调用返回时,我返回未解包的响应数据,这是在控制器中注入“resolvedPerson”时提供的数据。
$stateProvider.state('person', {
url: '/person/:personID',
resolve: {
resolvedPerson: function($stateParams) {
$http.get("/restapi/person/" + $stateParams.personID)
.then(function(response) { return response.data; });
}
},
templateUrl: 'person.html',
controller: 'peopleCtrl'
});
myApp.controller('peopleCtrl', ['$scope', 'resolvedPerson', function( $scope, resolvedPerson ) {
$scope.person = resolvedPerson;
}
链接:
<a ui-sref="person({ personID: people.person.personID })"> {{ people.person.name }}</a>
person.html
<pre>{{person}}</pre>
答案 1 :(得分:0)
我建议
href="personStateUrl/{{people.people}}"
因为在您的配置中,您通常会声明状态('person')的网址,它应该看起来像这样
.state('person', {
url: '/person/:personID',
...
});
感谢
获得你的身份 var personID = $stateParams.personID;