2015-01-31 21 views
133

İki eyalet arasında veriyi, URL'de veriyi göstermeden geçirme sorunuyla karşı karşıyayım, kullanıcı doğrudan bu duruma erişemiyor gibi. Örneğin,Köşeli ui yönlendirici URL'siz durumlar arasında veri iletimi

. İki durumum var "A" ve "B". "A" durumunda bazı sunucu çağrıları yapıyorum ve "B" durumunu aramasının yanıtını iletiyorum. Sunucu çağrısının yanıtı oldukça uzun olan bir dize mesajdır, bu yüzden bunu URL'de gösteremiyorum.

Yani, URL'leri kullanmadan, durumlar arasındaki verileri iletmek için açısal kullanıcı arayüzünde herhangi bir yol var mı?

API Reference/ui.router.state/$stateProvider

params A map which optionally configures parameters declared in the url, or defines additional non-url parameters. For each parameter being configured, add a configuration object keyed to the name of the parameter.

bölümünü Bkz:

cevap

176

Biz UI-Router params, yeni özelliği kullanabilirsiniz "... veya ek olmayan url parametreleri tanımlar ... "

Yani devlet def olacaktır:

$stateProvider 
    .state('home', { 
    url: "/home", 
    templateUrl: 'tpl.html', 
    params: { hiddenOne: null, } 
    }) 

az örnekler meydana doc mentioned above:

// define a parameter's default value 
params: { 
    param1: { value: "defaultValue" } 
} 
// shorthand default values 
params: { 
    param1: "defaultValue", 
    param2: "param2Default" 
} 

// param will be array [] 
params: { 
    param1: { array: true } 
} 

// handling the default value in url: 
params: { 
    param1: { 
    value: "defaultId", 
    squash: true 
} } 
// squash "defaultValue" to "~" 
params: { 
    param1: { 
    value: "defaultValue", 
    squash: "~" 
    } } 

EXTEND - çalışma örneği: Bu ui kullanarak bir çağrı olabilir

$stateProvider 
    .state('home', { 
     url: "/home", 
     params : { veryLongParamHome: null, }, 
     ... 
    }) 
    .state('parent', { 
     url: "/parent", 
     params : { veryLongParamParent: null, }, 
     ... 
    }) 
    .state('parent.child', { 
     url: "/child", 
     params : { veryLongParamChild: null, }, 
     ... 
    }) 

: Burada

http://plnkr.co/edit/inFhDmP42AQyeUBmyIVl?p=info bir durum tanımının bir örnektir -sref:

<a ui-sref="home({veryLongParamHome:'Home--f8d218ae-d998-4aa4-94ee-f27144a21238' 
    })">home</a> 

<a ui-sref="parent({ 
    veryLongParamParent:'Parent--2852f22c-dc85-41af-9064-d365bc4fc822' 
    })">parent</a> 

<a ui-sref="parent.child({ 
    veryLongParamParent:'Parent--0b2a585f-fcef-4462-b656-544e4575fca5', 
    veryLongParamChild:'Child--f8d218ae-d998-4aa4-94ee-f27144a61238' 
    })">parent.child</a> 

Örnek edin: here

+0

önerildiği gibi, ben bir iç içe durumda (Örnek üzerinde params kullanarak denedi - "/ kullanıcı/profil/kişiler", bu bana biraz hata verdi. Ebeveyn devleti için de “paramları” tanımlamalı mıyım? –

+0

Bir çalışma plunker oluşturdum ve cevabı uzattım. Umarım şimdi yardımcı olur ... –

+0

Ebeveynlerin tanımlanmış paramiklere sahip olması gerekli değil, detaylı cevap için teşekkürler. –

26

Params nesnesi $ stateParams içinde bulunur, ancak URL'nin bir parçası olmayacaktır. Değiştirme

.controller('editUserCtrl', function ($stateParams, $scope) {  
    $scope.paramOne = $stateParams.paramOne; 
    $scope.paramTwo = $stateParams.paramTwo; 
}); 

3A) bir kontrol birimi

$state.go("edit_user", { 
    user_id: 1,     
    paramOne: { objectProperty: "test_not_default1" }, 
    paramTwo: "from controller" 
}); 

3B den State değiştirme):

$stateProvider.state('edit_user', { 
    url: '/users/:user_id/edit', 
    templateUrl: 'views/editUser.html', 
    controller: 'editUserCtrl', 
    params: { 
     paramOne: { objectProperty: "defaultValueOne" }, //default value 
     paramTwo: "defaultValueTwo" 
    } 
}); 

2) kontrol olarak: Rota yapılandırmada

1) Html içinde durum

<div ui-sref="edit_user({ user_id: 3, paramOne: { objectProperty: 'from_html1' }, paramTwo: 'fromhtml2' })"></div> 

Example Plunker

+0

Teşekkürler, mükemmel. Ayrıca, hem $ state hem de $ stateParams'ı istiyorsanız, yalnızca $ state'i enjekte etmeniz gerektiğini fark ettiniz. StateParams nesnesi $ state: $ state.params'ın bir özelliğidir. –

+0

Geri kalanının işe yaraması için adım 1'in (varsayılan değerleri sağlayan) gerekli olduğu söylenmelidir ;-) –

+2

Özlü örnek için teşekkür ederiz. Benim için çalışıyor! (UI-Router v 1.0.3) – Roboprog

İlgili konular