Définir dynamiquement la valeur de ui-sref Angularjs
J'ai cherché pour une question similaire, mais ceux qui sont venus semblent légèrement différents.
Je suis en train de changer l'interface utilisateur-sref=" un lien dynamique (ce lien pointe vers la section suivante de l'assistant formulaire et la section suivante dépend de la sélection effectuée dans la liste déroulante). Je suis simplement en train d'essayer de définir l'interface utilisateur-sref attribut en fonction de certains choix dans une boîte de sélection. Je suis en mesure de changer l'interface utilisateur-sref en se liant à un attribut scope qui est défini lors de la sélection est faite. cependant, le lien ne fonctionne pas, est-ce possible? grâce
<a ui-sref="form.{{url}}" >Next Section</a>
et puis dans mon contrôleur, j'ai mis le paramètre de l'url de cette façon
switch (option) {
case 'A': {
$scope.url = 'sectionA';
} break;
case 'B': {
$scope.url = 'sectionB';
} break;
}
Sinon, j'ai utilisé des directives pour qu'il fonctionne en générant du lien hypertexte avec l'interface utilisateur souhaitée-sref attribut en fonction de l'option sélectionnée dans la boîte de sélection (menu déroulant).
Hhowever cela signifie que je dois re-créer le lien à chaque fois qu'une autre option est sélectionnée à partir de la selectbox qui provoque un indésirable effet scintillant.
Ma question est, est-il possible de changer la valeur de l'interface utilisateur-sref que j'ai essayé de faire ci-dessus par simpling la modification de la valeur de l'url dans mon contrôleur, ou dois-je re-créer l'ensemble de l'élément à l'aide d'une directive à chaque fois qu'une sélection est faite, comme j'ai fait ci-dessous? (juste indiquant ce à des fins d'exhaustivité)
Sélectionnez l'option directive la présente directive génère le lien de la directive)
define(['app/js/modules/app', 'app/js/directives/hyperLink'], function (app) {
app.directive('selectUsage', function ($compile) {
function createLink(scope,element) {
var newElm = angular.element('<hyper-link></hyper-link>');
var el = $(element).find('.navLink');
$(el).html(newElm);
$compile(newElm)(scope);
}
return {
restrict: 'E',
templateUrl: '/Client/app/templates/directives/select.html'
,link: function (scope, element, attrs) {
createLink(scope, element);
element.on('change', function () {
createLink(scope,element);
})
}
}
})
Lien hypertexte directive
define(['app/js/modules/app'], function (app) {
app.directive('hyperLink', function () {
return {
restrict: 'E',
templateUrl: '/Client/app/templates/directives/hyperLink.html',
link: function (scope, element, attrs) { }
}
})
Lien hypertexte modèle
<div>
<button ui-sref="form.{url}}">Next Section</button>
</div>
- double possible de Angularjs ajoutant html pour la variable avec ui-sref lien
Vous devez vous connecter pour publier un commentaire.
Il semble que ce soit possible de le faire après tout.
Un fil d'ariane sur GitHub par l'un des ui-router les auteurs m'ont amené à essayer le suivant:
Puis, dans votre contrôleur:
S'avère, cela fonctionne comme un charme w/modification de l'étendue des valeurs et de tous. Vous pouvez même faire état du nom de " constante de chaîne de référence d'une étendue valeur et qui mettra à jour le href de la vue ainsi 🙂
ng-click
,ng-href
n'a pas de travail.ui-sref-active
ne semble pas fonctionner avec elle si elle de la valeur liquidative c'est une étape manuelle pour mettre en surbrillance l'actif nav élémentIl est un travail plunker. Le plus simple de la façon semble être d'utiliser la combinaison de:
$state.href()
(doc ici) etng-href
(doc ici)Ces ensembles peuvent être utilisés comme:
Donc, (à la suite de cette plunker) avoir des états comme ceux-ci:
Nous pouvons modifier ces valeurs pour générer dynamiquement le href
Vérifier dans l'action ici
ORIGINAL:
Il est un exemple de travail comment obtenir ce dont nous avons besoin. Mais pas avec la dynamique
ui-sref
.Comme nous pouvons le pouvez vérifier ici: https://github.com/angular-ui/ui-router/issues/395
Mais nous pouvons utiliser les différentes fonctionnalités de
ui-router
:[$state.go("statename")][5]
Donc, cela pourrait être le contrôleur de trucs:
Et voici le gabarit HTML:
Travail exemple
REMARQUE: il n'est plus à jour lien vers $etat.aller définition, mais le obsolète est un peu plus clair pour moi
<a ui-sref="{{scopedStateName}}( { 'some-state-param': '{{scopedParamValue}}' })">My Dynamic Link</a>
Le seul problème avec cette approche, évidemment, est que l'interface utilisateur-sref n'est pas de surveiller les modifications de la portée des variables afin de href ne change pas sur les modifications de la valeur. Autant que je sache, ui-sref ne prend pas en charge cette.$state.go()
méthode.Prendre un coup d'oeil dans ce numéro #2944.
La
ui-sref
ne regarde pas l'état de l'expression, vous pouvez utiliserui-state
etui-state-params
de passer la variable.Aussi rapidement démo prévu dans le billet.
J'ai réussi à la mettre en œuvre cette manière (je suis en utilisant le controllerAs variante si - non pas via $champ).
Modèle
Contrôleur
Consultez aussi la documentation de
ui-sref
où vous pouvez passer params:https://github.com/angular-ui/ui-router/wiki/Quick-Reference#ui-sref
button
se comporte de la même manière quea
, la directive crée unhref
attribut sur le bouton au moment de la compilation, mais jamais les mises à jour de ce. Et un clic sur le bouton de la volonté de toujours aller de l'état de lahref
valeur de l', mais pas la mise à jourui-sref
Après avoir essayé les différentes solutions que j'ai trouvé le problème dans le
angular.ui.router
code.Le problème vient du fait que l'interface utilisateur.routeur
update
méthode est déclenchée avec leref.state
ce qui signifie qu'il n'est pas possible de mettre à jour la valeur de lahref
utilisé lorsque l'élément est cliqué.Voici 2 solutions pour résoudre le problème:
Personnalisé Directive
Le code HTML pour l'utiliser c'est très simple :
Correction de l'interface utilisateur.routeur code :
Dans angular.router.js vous trouverez la directive
$StateRefDirective
(ligne 4238 pour la version 0.3).Modifier la directive code :
angular-ui-router
je dirais contre elle. Votre collègue peut essayer de le mettre à jour et boom, et nul ne sait où le bug vient.Venu à répondre que pour de bon 🙂
Heureusement, vous n'avez pas besoin d'utiliser un bouton pour ng-cliquez sur, ou l'utilisation d'une fonction à l'intérieur d'un ng-href pour obtenir ce que vous cherchez. Au lieu de cela;
Vous pouvez créer un
$scope
var dans votre contrôleur et d'attribuer leui-sref
chaîne et l'utiliser à votre avis, queui-sref
attribut.Comme ceci:
Qui fonctionne parfaitement pour moi.
ui-sref
maishref
n'est généré.Toutes les suggestionsLa meilleure approche est de faire usage de
uiRouter's $state.go('stateName', {params})
sur le bouton deng-click
directive. Et désactiver le bouton si aucune option n'est sélectionnée.HTML
Contrôleur
État
c'est tout simplement de travailler pour moi
dans le contrôleur
en vue
Pour gérer multiples dynamique params à l'aide de l'interface utilisateur-sref, voici ma solution :
Html : ('MyPage.html')
Contrôleur : ('MyCtrl')
stateProvider : ('mon_état')
Profitez-en !
ui-sref="item.state"
Si quelqu'un ne veut définir dynamiquement la $stateParams de ui-sref en Angularjs.
Remarque: inspecter l'élément, il apparaît toujours comme "acheter({myPairIndex:$index})" mais $index seront extraites dans cet état.
Elle renvoie un objet
Ou juste quelque chose comme ceci: