Il existe deux problèmes avec Angularjs
1.
Un article est chargé via $http. L'article a un titre. Maintenant, je souhaite remplacer le titre du navigateur par le titre de l'article une fois l'article chargé. La structure html est la suivante
<!doctype html>
<html data-ng-app="app">
<head data-ng-controller="head">
<meta charset="utf-8"/>
<titlte data-ng-bind="title||'Document'"></title>
</head>
<body>
<p data-ng-controller="main">
<button data-ng-click="getPost()">GET POST</button>
<p data-ng-module="post">
<h2 data-ng-bind="post.title"></h2>
<article data-ng-bind="post.content"></article>
</p>
</p>
</body>
</html>
C'est-à-dire qu'une fois la publication chargée, le titre du navigateur et post.title s'affichent de la même manière.
J'ai recherché des solutions de communication inter-domaines et j'ai vu ceci (Comment les contrôleurs AngularJS communiquent-ils ?). Parmi ces trois méthodes, les deux premières ne conviennent pas à ma structure actuelle, j'utilise donc la troisième méthode et la mets en œuvre, mais elle est synchronisée. le fatal c'est qu'il faut le synchroniser via un déclencheur (clic, etc.), donc en fait, je veux juste demander comment synchroniser automatiquement au lieu de synchroniser via un déclencheur
2.
Rappel $scope,
Prenons cet article de chargement comme exemple. Par exemple, l'article chargé contient du code enveloppé dans une balise pre. Après le chargement, d'autres bibliothèques doivent être utilisées pour implémenter la mise en évidence, donc l'opération de mise en évidence doit être effectuée une fois les données liées et rendues. . Cependant, je n’ai trouvé aucune solution.
J'en ai aussi écrit moi-même, et j'ai eu le meilleur des deux mondes
Le premier type :
Après la liaison des données, interrogez de manière récursive toutes les balises pré de la page actuelle et mettez-les en surbrillance une fois qu'elles ont été trouvées ou après un nombre limité de fois.
Le deuxième type :
window.setTimeout(function(){}, 1000);
Le résultat des deux méthodes est que la première ne fonctionne pas. Peu importe le nombre de fois où nous récurons, nous ne trouvons pas la balise pre
.
La deuxième option est possible, mais je ne pense pas que ce soit une bonne solution
Vous ne comprenez pas très bien ce que vous entendez par communication inter-domaines ? Serait-ce une communication entre contrôleurs ? Et déclencheur ?
1. Écrivez simplement ng-bind directement sans utiliser data-* comme ça
2. Le contrôleur où se trouve
<title>
est au même niveau que le contrôleurmain
. Vous pouvez ajouter un contrôleur parent en dehors d'eux etmainController.$scope.$parent.title = post.title
, ou utiliser directement $rootScope (non recommandé). Vous pouvez également le faire via $emit/$broadcast/$on mais ce n'est pas nécessaire.Puis :
3. Vous pouvez rechercher de bons plug-ins de mise en évidence sur github en utilisant
angular highlight
comme mot-clé. installation de la tonnelle de4. N'utilisez pas window.setTimeout. Utilisez
$timeout()
fourni par angulaire, cela renverra une promesse.5. En fait, une meilleure façon de résoudre le deuxième problème est d'utiliser le service
$resource.get().$promise.then();
// ou $http pour garantir que les données distantes sont chargées avant l'exécution.Ajoutez une classe
wtitle
à l'élément titre dans le modèle qui restitue l'article, et le titre de la page actuelle sera remplacé par le titre de l'article.Vous pouvez également le faire dans WeChat~
La fonction de wtitle est de définir le contenu de element.text() comme document.title. Le but de l'utilisation d'iframe est de le rendre efficace dans la vue Web de l'application
.