Actuellement, j'ai une page Angular.js qui permet de rechercher et d'afficher les résultats. L'utilisateur clique sur un résultat de recherche, puis clique sur le bouton de retour. Je souhaite que les résultats de la recherche s'affichent à nouveau, mais je n'arrive pas à déterminer comment déclencher l'exécution de la recherche. Voici le détail:
- Ma page Angular.js est une page de recherche, avec un champ de recherche et un bouton de recherche. L'utilisateur peut saisir manuellement une requête et appuyer sur un bouton. La requête ajax est déclenchée et les résultats sont affichés. Je mets à jour l'URL avec le terme de recherche. Tout fonctionne bien.
- L'utilisateur clique sur un résultat de la recherche et est redirigé vers une autre page - cela fonctionne également très bien.
- L'utilisateur clique sur le bouton Précédent et retourne à ma page de recherche angulaire, et l'URL correcte s'affiche, y compris le terme de recherche. Tout fonctionne bien.
- J'ai lié la valeur du champ de recherche au terme de recherche dans l'URL, il contient donc le terme de recherche attendu. Tout fonctionne bien.
Comment puis-je exécuter à nouveau la fonction de recherche sans que l'utilisateur n'ait à appuyer sur le "bouton de recherche"? Si c'était jquery, j'exécuterais une fonction dans la fonction documentready. Je ne peux pas voir l'équivalent Angular.js.
$routepProvider
? Utilisez-le pour vous connecter au service de votre application qui fournit des données pour les résultats de la recherche. Ne pensez pas endocument.ready
termes comme avec jQuery. Difficile d'aider beaucoup sans voir comment vous avez actuellement la recherche câbléeRéponses:
D'une part, comme @ Mark-Rajcok l'a dit, vous pouvez simplement vous en sortir avec une fonction intérieure privée:
Vous pouvez également consulter la directive ng-init . La mise en œuvre ressemblera beaucoup à:
Mais attention à cela car la documentation angulaire implique (depuis la v1.2) de ne PAS l'utiliser
ng-init
pour cela. Cependant, cela dépend de l'architecture de votre application.J'ai utilisé
ng-init
lorsque je voulais transmettre une valeur du back-end à l'application angulaire:la source
myCtrl
contrôleur est créé et s'exécute.<div smth on-init="doWhatever()">
. Bien sûr, cela dépend d'un certain cas d'utilisation.Essaye ça?
la source
Je ne pourrais jamais me mettre
$viewContentLoaded
au travail etng-init
ne devrait vraiment être utilisé que dans unng-repeat
(selon la documentation), et aussi appeler une fonction directement dans un contrôleur peut provoquer des erreurs si le code repose sur un élément qui n'a pas encore été défini .C'est ce que je fais et ça fonctionne pour moi:
Sauf si vous utilisez
ui-router
. Alors c'est:la source
$scope.$on('$routeChangeSuccess'
se déclenche à chaque fois que les paramètres de l'url changent (via$location
par exemple), et donc vous pouvez utiliser juste$scope.$on('$locationChangeSuccess'
. Si vous avez besoin d'un déclencheur lors du chargement / rechargement de la page, vous pouvez utiliser$scope.$watch('$viewContentLoaded'
comme suggéré ici. Il ne se déclenchera pas lors des changements de paramètres d'URL.la source
$scope
et travaillons plutôt avecthis
.La solution de Dimitri / Mark n'a pas fonctionné pour moi, mais l'utilisation de la fonction $ timeout semble bien fonctionner pour garantir que votre code ne s'exécute qu'une fois le balisage rendu.
J'espère que cela aide.
la source
Vous pouvez le faire si vous souhaitez voir l'objet DOM viewContentLoaded changer et faire quelque chose. l'utilisation de $ scope. $ on fonctionne aussi mais différemment, surtout lorsque vous avez un mode de page sur votre routage.
la source
Vous pouvez utiliser l'objet $ window angulaire:
la source
Une autre alternative:
(via https://stackoverflow.com/a/30258904/148412 )
la source
Encore une autre alternative si vous avez un contrôleur spécifique à cette page:
la source
Lorsque vous utilisez $ routeProvider, vous pouvez résoudre sur .state et démarrer votre service. C'est-à-dire que vous allez charger Controller et View, seulement après avoir résolu votre service:
ui-routes
Un service
la source
Dmitry Evseev a trouvé la réponse assez utile.
Cas 1: Utiliser angularJs seul:
Pour exécuter une méthode au chargement de la page, vous pouvez utiliser
ng-init
dans la vue et déclarer la méthode init dans le contrôleur, ayant dit que l'utilisation d'une fonction plus lourde n'est pas recommandée, selon les documents angulaires sur ng-init :HTML:
Manette:
Avertissement: N'utilisez pas ce contrôleur pour une autre vue destinée à une intention différente car cela entraînerait également l'exécution de la méthode de recherche.
Cas 2: Utilisation d'Ionic:
Le code ci-dessus fonctionnera, assurez-vous simplement que le cache de vue est désactivé dans le
route.js
:route.js
J'espère que cela t'aides
la source
cache: false
fait pour moi - merci!J'ai eu le même problème et seule cette solution a fonctionné pour moi (elle exécute une fonction après le chargement d'un DOM complet). J'utilise ceci pour faire défiler pour ancrer une fois la page chargée:
la source
Vous pouvez enregistrer les résultats de la recherche dans un service commun qui peut être utilisé de n'importe où et ne s'efface pas lorsque vous accédez à une autre page, puis vous pouvez définir les résultats de la recherche avec les données enregistrées pour le clic du bouton Retour
Pour votre backbutton
la source
appeler les méthodes initiales dans la fonction self initialize.
la source