Comment exécuter AngularJS contrôleur de fonction au chargement de la page?
Actuellement, j'ai un Angular.js la page qui permet la recherche et affiche les résultats. L'utilisateur clique sur un résultat de recherche, les clics de bouton de retour. Je veux les résultats de la recherche pour l'afficher à nouveau, mais je ne peux pas savoir comment déclencher la recherche à exécuter. Voici le détail:
- Mon Angular.js la page est une page de recherche, avec un champ de recherche et une recherche
bouton. L'utilisateur peut taper manuellement dans une requête et appuyez sur un bouton et
et la requête ajax est tiré et que les résultats sont affichés. - Je mettre à jour l'URL avec le terme de recherche. Que tous fonctionne bien. - Utilisateur clique sur un résultat de la recherche et est pris à une page différente - qui fonctionne très bien aussi.
- Utilisateur clique sur le bouton retour, et remonte à mon angulaire de la page de recherche, et que l'URL est correcte est affichée, y compris le terme de recherche. Tous fonctionne bien.
- J'ai lié le champ de recherche de la valeur pour le terme de recherche dans l'URL, donc il contient la attendue terme de recherche. Tous fonctionne bien.
Comment puis-je obtenir la fonction de recherche pour exécuter à nouveau sans que l'utilisateur ait à appuyer sur le "bouton de recherche"? Si c'était jquery, alors je voudrais exécuter une fonction dans le documentready fonction. Je ne peux pas voir le Angular.js l'équivalent.
- êtes-vous à l'aide de
$routepProvider
? L'utiliser pour se connecter au service de votre application qui fournit des données pour les résultats de la recherche. Ne pense pas que dansdocument.ready
termes comme avec jQuery. Dur pour aider beaucoup de choses sans en voir la façon dont vous avez recherche filaire actuellement
Vous devez vous connecter pour publier un commentaire.
D'une part de @Marc-Rajcok dit, vous pouvez tout simplement obtenir loin avec intérieure privée fonction:
Aussi, vous pouvez prendre un coup d'oeil à ng-init directive. La mise en œuvre sera un peu comme:
Mais prendre soin à ce sujet que angulaire de la documentation implique (depuis v1.2) de ne PAS utiliser
ng-init
pour que. Cependant omi cela dépend de l'architecture de votre application.J'ai utilisé
ng-init
quand j'ai voulu passer d'une valeur à partir de l'arrière-end dans angulaire application:myCtrl
contrôleur est créé et s'exécute.<div smth on-init="doWhatever()">
. Bien sûr, il dépend d'un certain cas d'utilisation.function init(viewmodel){$scope.vm = viewmodel};
et maintenant vous pouvez interpoler l'ensemble du modèle. c'est une mauvaise conception pour initialiser $de la portée de la variable dans le code html, car ce n'est pas de la responsabilité de l'html (et c'est lent). Toutefois, dans asp.net mvc, il est logique et fonctionne efficacement.Essayer ce?
Je n'ai jamais pu obtenir
$viewContentLoaded
de travailler pour moi, etng-init
devrait vraiment être utilisé dans unng-repeat
(selon la documentation), et aussi l'appel d'une fonction directement dans un contrôleur peut provoquer des erreurs si le code s'appuie sur un élément qui n'a pas encore été définie.C'est ce que je fais et ça fonctionne pour moi:
Sauf si vous utilisez
ui-router
. Ensuite, c'est:$scope.$on('$routeChangeSuccess'
feux à chaque fois les paramètres dans l'url modifiée (via$location
par exemple), et donc vous pouvez simplement utiliser$scope.$on('$locationChangeSuccess'
. Si vous avez besoin d'un déclencheur à la page de chargement/rechargement, vous pouvez utiliser$scope.$watch('$viewContentLoaded'
comme il a été suggéré ici. Il ne sera pas le feu au cours de paramètres d'url changements.$scope
et au lieu de travail avecthis
.Dimitri/Marque de la solution n'a pas fonctionné pour moi, mais à l'aide de la $timeout fonction semble bien fonctionner pour assurer que votre code ne s'exécute après le balisage est rendu.
Espère que cela aide.
Vous pouvez le faire si vous voulez regarder la viewContentLoaded DOM objet de modifier et de faire quelque chose. à l'aide de $scope.$sur fonctionne aussi, mais différemment, surtout quand vous avez une page mode de routage.
Vous pouvez utiliser angulaire de dollars de la fenêtre de l'objet:
Une autre alternative:
(via https://stackoverflow.com/a/30258904/148412)
Encore une autre alternative si vous avez un contrôleur spécifique à cette page:
Lors de l'utilisation de $routeProvider vous pouvez résoudre .l'état et bootstrap votre service. C'est-à-dire, vous allez charger le Contrôleur et la Vue, qu'après de résoudre votre Service:
ui-routes
Service
Trouvé Dmitry Evseev réponse très utile.
Cas 1 : Utilisation d'angularJs seul:
À l'exécution d'une méthode de chargement de la page, vous pouvez utiliser
ng-init
dans la vue et de déclarer la méthode init dans le contrôleur, après avoir dit que l'utilisation de plus lourds fonction n'est pas recommandé, comme par le angulaire Docs sur ng-init:HTML:
Contrôleur:
Avertissement : de Ne pas utiliser ce contrôleur pour un autre point de vue sur une intention différente, comme il sera la cause de la méthode de recherche sera exécutée il y a aussi.
Cas 2 : Utilisation Ionique:
Le code ci-dessus fonctionne, assurez-vous que le cache est désactivé dans le
route.js
comme:route.js
Espère que cette aide
cache: false
l'ai fait pour moi – merci!J'ai eu le même problème et seule cette solution a fonctionné pour moi (il exécute une fonction après un DOM a été chargé). - Je l'utiliser pour faire défiler jusqu'à l'ancre une fois que la page a été chargée:
Vous pouvez enregistrer les résultats de la recherche dans un service commun qui peut l'utiliser à partir de n'importe où et n'est pas évident quand accédez à une autre page, et puis vous pouvez définir les résultats de la recherche avec les données enregistrées pour le clic de bouton de retour
Pour votre backbutton
appel de méthodes initiales à l'intérieur de l'auto fonction d'initialisation.