Casella di controllo Angularjs Comportamento dispari
-
21-12-2019 - |
Domanda
Alcuni amici e io stiamo lavorando su un progetto. Questo è il secondo progetto in cui sto lavorando con AngularJS, stavano attualmente utilizzando la versione 1.2.3.
Nonostante ciò a volte trovo parte del suo comportamento dispari e non capisco perché qualcosa stia accadendo.
Quindi la situazione è questa ... ho nel mio file cshtml il followam:
<div class="checkbox">
<label>
<input name="somecheckbox" type="checkbox" ng-click="click()" ng-model="displayRegardlessOfSomething" />
<label>Display regardless of something</label>
</label>
</div>
<h1>{{displayRegardlessOfSomething}}</h1>
.
Nel mio file JavaScript ho il seguente codice all'interno di una direttiva:
All'inizio:
$scope.displayRegardlessOfSomething = true;
.
E ho quanto segue:
$scope.click = function () {
console.log($scope.displayRegardlessOfSomething)
}
.
E ogni volta che controllo o deselezionando la casella di controllo, ottengo sempre true ... Tuttavia, la parte particolare è che il contenuto all'interno del <h1></h1>
modifica i tag .... Quindi, è come se sto cambiando il valore di una variabile sullo strato HTML, ma non sullo strato JavaScript ...
Perché sta succedendo?
Ho risolto il problema usando $ genitor.displayregardlessofsomething ma non capisco perché risolto il problema ... Cosa ha causato il problema in primo luogo?
Soluzione
Ho provato quello che hai fatto nel violino e funziona bene per me.
http://jsfiddle.net/nicolasmoise/x9kyu/1/ Il fatto che funzioni per te quando hai usato $parent
mi fa pensare che un controller genitore sia in errore qui.Forse hai due variabili con gli stessi nomi?
P.S.: Ricorda che in JavaScript, i primitivi sono passati per valore e gli oggetti sono passati per riferimento.Questa è la causa di molti errori per gli sviluppatori angolari.Guarda questo violino dove illuso il mio punto.
Con primitivi: http://jsfiddle.net/nicolasmoise/x9kyu/
con oggetti: http://jsfiddle.net/nicolasmoise/x9kyu/2/
Altri suggerimenti
A meno che tu non sia abbastanza sicuro che tutto vive nella stessa portata, che non è quasi mai, dovresti ha sempre un punto da qualche parte nella tua espressione del modello NG .
myApp.controller('MyController2', function($scope) {
$scope.model = { displayRegardlessOfSomething: true };
$scope.click = function() {
console.log($scope.model.displayRegardlessOfSomething);
};
});
<input type="checkbox"
ng-click="click()"
ng-model="model.displayRegardlessOfSomething" />
.
Vedi Questo pinkeer per i dettagli per la demo live.