2016-04-16 7 views
1

Gibt es eine Möglichkeit, $ stateParams-Werte zu definieren, wenn ein bestimmter Zustand getroffen wird. Ich habe einen Eltern-Zustand mit 2 Kindern, die alle mit der gleichen Ansicht sind:Angular ui-router params wenn spezifische Kind-URL

.state('customer { 
    url: '/customer', 
    templateUrl: '/customer/overview/customer.overview.html', 
    resolve: customerResolve, 
    controller: 'customer.overview.controller', 
    params: { type: null } 
}) 

.state('customer.a' { 
    url: '/a', 
    templateUrl: '/customer/overview/customer.overview.html', 
    resolve: customerResolve, 
    controller: 'customer.overview.controller', 
    params: { type: 'a' } 
}) 

.state('customer.b' { 
    url: '/b', 
    templateUrl: '/customer/overview/customer.overview.html', 
    resolve: customerResolve, 
    controller: 'customer.overview.controller', 
    params: { type: 'b'} 
}) 

alle Sie haben die gleiche Entschlossenheit:

var customerResolve = { 

    resolvedCustomers: ['$state', '$stateParams', function ($state, $stateParams) { 

     if ($stateParams.type == "a") 
     { 
      //resolve data 
     } 
     else if ($stateParams.status == "b") { 

      //resolve data 
     } 
    }] 
} 

Wenn ich navigieren zu .../Kunden/a Ich erreiche meine Entschlossenheit, aber ich erwarte, dass die $stateParams.typea ist, aber es ist null. Das Gleiche gilt für .../customer/b.

Der Wert ist null, weil der Parent-State auf diese Weise definiert ist. Ich kann die parent-params nicht löschen, da dies meinen Typparameter vollständig in der Auflösung löscht. Ich möchte nur den Typ-Parameter in meinem Eltern-Zustand definieren, aber keinen Wert wie 'Null' oder etwas anderes, ich möchte meine Kind-Staaten diesen Typparameter füllen. wollen <a ui-sref="customer({type: 'a'})">Customer type A</a>

Aber ich auf die URL den Typ-Parameter setzen, indem nur die Navigation:

Ich kann es ui-SRef wie so verwendet erzielen. Wenn mehr Klarheit benötigt wird, kann ich einen Plunkr bereitstellen.

Antwort

0

Idealerweise sollten Sie keine Konfiguration wie die Ihre haben müssen, in der Ihre Eltern und alle Kinder dieselbe templates und controllers haben. Aber wenn Sie wirklich brauchen, was Sie erwähnt haben, können Sie die data Eigenschaft verfügbare Konfiguration im Zustand verwenden, wie here erklärt und darauf zuzugreifen mit $state.current.data

ich geschaffen habe eine plunkr gleiche mit Ihren Anwendungsfall

+0

Das macht tatsächlich den Job und ist was ich brauchte. Sehr geschätzt. –

0

So wie ich es vor kurzem

myApp.config(function($routeProvider) { 
     when('/user/:userID', { 
     templateUrl: 'app/partials/user.html', 
     controller: 'userPageCtrl' 
     }) 
    }); 

Dann in Ihrem Controller

myApp.controller('userPageCtrl', ['$scope','$routeParams', 
function($scope, $routeParams) { 

    console.log("user controller"); 
    console.log("route param", $routeParams); 
}); 

und $routeParams userID haben getan haben, und die URLs von /user/2 zugegriffen wird, /user/3, etc

edit: Ich nehme an, dass dies ähnlich gemacht wird, dh mit der :param Syntax, in eckigen ui

+0

zu zeigen, nicht ganz, was im Auf der Suche nach. Ich habe keine ID-Parameter auf dieser Seite, da es sich um einen Überblick über mehrere Kunden eines bestimmten Typs handelt. Ich verwende die gleiche Seite und Controller für zwei Arten von Kunden. –

+0

In Ihrem Controller können Sie nicht einfach und wenn die Aussage auf dem Param basiert? Userid könnte genauso gut ein usertype-Parameter sein. Mein Verständnis war, dass Sie die Syntax ': routeParameter' brauchten, von der ich annehme, dass sie die gleiche ist. – tenCupMaximum

Verwandte Themen