Excusez-moi, j'ai créé une page dans laquelle la partie d'en-tête est importée de ng include (il y a un contrôleur de connexion dedans pour déterminer s'il faut afficher le bouton de connexion. En même temps, j'ai défini une page de connexion dans ngroute, qui utilise également logincontroller. J'ai passé $http Après avoir obtenu les données, je rappelle la portée, mais la page d'affichage n'est pas mise à jour. Il semble que le même contrôleur ait deux portées. (J'ai trouvé que lorsque nginclude est terminé, les éléments du contrôleur de connexion seront exécutés une fois et seront à nouveau déclenchés lors de l'entrée dans la page de connexion)
J'ai aussi essayé $apply() comme mentionné en ligne et le résultat sera une erreur
function($scope,$http,$location,$timeout,userService,notifyService) {
$scope.login = {
userid:"bbbbb",
}
$scope.user={islogged:0}
$timeout(function(){
//$scope.user={islogged:1}
console.log($scope.user);
},5000)
$scope.httplogin = function(){
$http({
method:'POST',
url:server.domain+server.login,
data:{
userid:$scope.login.userid,
password:$scope.login.password,
},
}).success(function(d){
if(d.code == 200){
$scope.login={userid:1111111}
$scope.user={islogged:1}
notifyService.make('success',d.data.msg,5)
}else{
alert(d.msg)
}
})
}
Ce ci-dessus est le code du contrôleur, qui contient le consolelog dans le timeout S'il est imprimé, trois apparaîtront à la fois Est-ce parce que j'utilise le même ngcontroller à trois endroits ? le commentaire appelé $scope.user={islogged:1} dans le délai d'attente sera imprimé comme ceci, ce qui est anormal pour ma tâche, j'espère qu'ils sont tous identiques
.Object {islogged: 0}
Object {islogged: 0}
Object {islogged: 1}
Si vous décommentez $scope.user={islogged:1} et le laissez s'exécuter, les trois contrôleurs seront imprimés normalement.
Object {islogged: 1}
Object {islogged: 1}
Object {islogged: 1}
=================
Je viens de le tester à nouveau, et cela ne modifie que la valeur sous le ngcontroller actuellement déclenché. S'il y a plusieurs ngcontrollers, les valeurs des autres ngcontrollers ne changeront pas, que ce soit sous nginclude ou ngview. Comment synchroniser les données modifiées par le même ngcontroller vers un autre endroit ?
Etes-vous sûr que c'est la même portée ?
ng-include
Un nouveau périmètre sera créé.Après avoir lu le code
Il est vrai que chaque contrôleur est une instance distincte et ne s'affecte pas les uns les autres. Vous pouvez envisager de placer l'état des données dans une portée globale (niveau supérieur) ; un meilleur moyen serait de le gérer uniformément via le service
Par exemple :
$scope.$apply() ne fonctionne pas ?
Il est préférable de s'assurer que le
$scope
que vous voyez à deux endroits a la même portée, et non que l'un d'eux soit une sous-portée de l'autre.Il vaudrait mieux poster le code~
J'ai également rencontré le même problème. Lorsque $scope était modifié pour la première fois, les données sur l'interface ne bougeaient pas (par exemple, lorsqu'elle commençait à disparaître), les données changeaient immédiatement. , puis $scope Lorsqu'il change à nouveau, l'interface change en conséquence.
J'ai aussi essayé d'utiliser $apply, mais cela signalerait une longue liste d'erreurs. On dit que quelque chose est déjà utilisé, etc... Je ne comprends pas... J'espère qu'il y a une solution.