2017-03-22 10 views
1

ui-routerチュートリアルhttps://plnkr.co/edit/jbZgIg?p=infoでは、単一のパラメータpersonIDを状態に渡しています。

ui-sref="people.person({ personId: person.id })" 

状態である:

{ 
    name: 'people.person', 
    url: '/{personId}', 
    component: 'person', 
    resolve: { 
    person: function(people, $stateParams) { 
     return people.find(function(person) { 
     return person.id === $stateParams.personId; 
     }); 
    } 
    } 
} 

私は2つのパラメータ(URLを使用して1可視、及びそのIDされる隠された第二に合格したい場合の例に取り組んでいユーザーはURLで見ることはできません)。似た何か:

ui-sref="people.person({ personId: person.id, personUri : person.uri })" 

と私は状態はこのような何かになりたい(しかし、それは動作しませんでした!):状態が示すように

{ 
    name: 'people.person', 
    url: '/{personUri}', 
    component: 'person', 
    resolve: { 
    person: function(people, $stateParams) { 
     return people.find(function(person) { 
     return person.id === $stateParams.personId; 
     }); 
    } 
    } 
} 

、私はpersonUriを使用したいですをURLに入力してください。personIDサービスに渡します。

答えて

1

あなたは

.state('other', { 
    url: '/:personUri', 
    params: { 
     personUri:"", 

     // this param is not part of url 
     // it could be passed with $state.go or ui-sref 
     personId: "", 
     } 
... 
+0

解決からpersonUriとpersonIdの値を受け取りたい。それらのパラメータを ""に設定しましたか?私は値を "" !!!!! – EddyG

+1

""はデフォルト値です。 ui-sref = "people.person({personId:person.id、personUri:person.uri})"を使用すると、値が取得されます。デフォルト値を使用しない場合はnullに設定できます。 –

+0

):)とテスト:)と働いて;)おかげで親愛なる。 – EddyG

0

urlパラメータでオブジェクトを渡す代わりに、オブジェクトを渡してコントローラの関数を呼び出すだけで、コントローラ自体でそのオブジェクトで何をしたいのかを行い、内部でサービスを呼び出すことができます。

例:HTMLで

$scope.func = function info(person){ 
    console.log(person); 
    PeopleService.xyz(person).then(function(response){ 
     console.log('Service called') 
    }) 
    } 

このようにそれを呼び出す:

<button ng-click="func(person)"> Click me</button> 
+2

のparams使用することができます。しかし意味合いパラメータは、次により必要とされるということです状態。したがって、次の州のコントローラを呼び出すことはあまり役に立たないでしょう。また、あなたがこの状態でそれを使いたいと思ったとしても、彼が望まないかもしれないasync/awaitの問題があるかもしれません(したがって、ui-routerの状態解決にそれらを入れることは、その状態で使用するなら有益でしょう)。 – rrd

関連する問題