angularjs - Accessing ui-router state params from an attribute-type directive (NOT a component) -


we're upgrading old version of ui router v1.0.5, , i'm having issue trying replace our deprecated $stateparams uses. use simplified example, have unique-name attribute-type directive use on form field validation check make sure text in field unique name. idea we're either adding new doohickey or changing name of existing doohickey, , want ensure no other doohickey has same name.

in our old code, doohickeyid value $stateparams this:

function uniquename(doohickeysearchservice, $stateparams, $q) {         return {             restrict: 'a',             require: 'ngmodel',             link: function (scope, elm, attrs, ctrl) {                 ctrl.$asyncvalidators.uniquename = function (modelvalue) {                     // use doohickeysearchservice founddoohickey name                     // then...                     return founddoohickey.id !== $stateparams.doohickeyid;                 };             }         };     } 

probably way over-simplified, core of problem there: how access doohickeyid value without using deprecated $stateparams? there's parent state that's getting url , /doohickey/{doohickeyid:int}/edit, specified in state definition.

i can use $state $current state, , array of states path property, , can see doohickeyid param in 1 of states in path. unfortunately, if take value() of param, comes undefined, though $stateparams has correct doohickeyid value. i've tried adding doohickeyid resolve on parent state, unfortunately doesn't give me data on attribute-type directive need it.

reading docs , googling turning references accessing parent data child states, or component, i'm trying access attribute-type directive, not state/component. there way without giving our code base major overhaul?

have tried solution ui-router documentation?

instead of using global $stateparams service object,

inject $uirouterglobals , use uirouterglobals.params

myservice.$inject = ['$uirouterglobals']; function myservice($uirouterglobals) {   return {     paramvalues: function () {       return $uirouterglobals.params;     }   } } 

instead of using per-transition $stateparams object,

inject current transition (as $transition$) , use transition.params

mycontroller.$inject = ['$transition$']; function mycontroller($transition$) {   var username = $transition$.params().username;   // .. username } 

https://ui-router.github.io/ng1/docs/latest/modules/injectables.html#_stateparams


Comments

Popular posts from this blog

ios - MKAnnotationView layer is not of expected type: MKLayer -

ZeroMQ on Windows, with Qt Creator -

unity3d - Unity SceneManager.LoadScene quits application -