<section ng-app="app" ng-controller="ctrl">
<p ng-show="check && form.$invalid"></p>
<form name="form" ng-submit="init()">
<input type="text" ng-model="text" required/>
<!-- <input type="submit" ng-click="alterCheck()"/> -->
<input type="submit" ng-click="check=true"/>
</form>
</section>
angular.module('app', [])
.controller('ctrl', function($scope){
$scope.check = false;
$scope.init2 = function() {
$scope.text = '';
}
$scope.init = function() {
$scope.init2();
$scope.check = false;
}
$scope.alterCheck = function() {
$scope.check = true;
}
})
Dans les projets réels, l'utilisation de ng-click="check=true"
entraînera l'affichage de p
après avoir cliqué, mais ng-click="alterCheck()"
ne le fera pas. Quelle en est la raison ?
Le code ci-dessus ne peut pas reproduire le phénomène que j'ai mentionné. Y a-t-il d'autres raisons qui pourraient provoquer cela ?
Je peux reproduire un problème similaire à ce que vous avez décrit dans cet exemple (car je l'ai déjà rencontré, donc je l'ai regardé encore quelques fois) :
Si vous exécutez le code actuel, vous constaterez que
.{{ checkIndex }}
il n'y a aucun changement du tout. Peu importe la force avec laquelle vous appuyez, il sera inutile de pousser la sourisMais si
template
est remplacé par la partie de code que j'ai commentée et utilise la méthodechangeCheckIndex
,{{ checkIndex }}
changera.Alors la question est : comment cette situation s’est-elle produite ? Il faut encore revenir à la documentation (récemment j'ai trouvé que la documentation de
ng
est plutôt bonne) :Adresse du document : ngRepeat
Il est difficile de répondre à la différence entre la copie de valeur et la référence d'objet. Je ne peux pas reproduire l'erreur, je ne peux donc donner qu'une idée approximative.