<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;
}
})
Dalam projek sebenar, menggunakan ng-click="check=true"
akan menyebabkan p
dipaparkan selepas mengklik, tetapi ng-click="alterCheck()"
tidak akan menyebabkannya?
Kod di atas tidak boleh menghasilkan semula fenomena yang saya nyatakan. Adakah terdapat sebarang sebab tambahan yang mungkin menyebabkan ini?
Saya boleh menghasilkan semula masalah yang serupa dengan perkara yang anda nyatakan dalam contoh ini (kerana saya pernah menemuinya sebelum ini, jadi saya melihatnya beberapa kali lagi):
Jika anda menjalankan kod semasa, anda akan mendapati bahawa
{{ checkIndex }}
tiada perubahan sama sekali Tidak kira betapa keras anda menekan, ia akan menjadi sia-sia untuk mencucuk tetikusTetapi jika
template
digantikan dengan bahagian kod yang saya ulas dan menggunakan kaedahchangeCheckIndex
,{{ checkIndex }}
akan berubah.Maka persoalannya, bagaimana keadaan ini berlaku? Kita masih perlu kembali kepada dokumentasi (baru-baru ini saya mendapati bahawa dokumentasi
ng
cukup bagus):Alamat dokumen: ngRepeat
Perbezaan antara penyalinan nilai dan rujukan objek sukar dijawab. Saya tidak dapat menghasilkan semula ralat, jadi saya hanya boleh memberikan idea kasar.