<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;
}
})
在实际项目中,使用 ng-click="check=true"
的方法会造成点击后 p
处于显示的状态,而 ng-click="alterCheck()"
则不会,请问这是什么原因呢?
上述代码无法复现我所说的现象。有什么额外的原因可能造成这一现象吗?
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.