AngularJS: ng-model non è vincolante con ng-checked per le checkbox

Ho fatto riferimento a questo prima di fare questa domanda.

AngularJs non si associa a ng-checked con ng-model

Se ng-checked viene valutato su true nel lato html , il ng-model non viene aggiornato. Non riesco ng-repeat come suggerito nella domanda precedente perché devo usare alcuni stili per ogni checkbox.

Ecco il plunker che ho creato per illustrare il mio problema.

Per vedere quello che voglio, si prega di aprire la console, e basta fare clic sul pulsante Submit . Si prega di non selezionare alcuna casella di controllo.

Grazie in anticipo!

    ngModel e ngChecked non sono pensati per essere usati insieme.

    ngChecked si aspetta un’espressione, quindi dicendo ng-checked="true" , stai praticamente dicendo che la casella di controllo sarà sempre selezionata di default.

    Dovresti essere in grado di usare solo ngModel , legato a una proprietà booleana sul tuo modello. Se vuoi qualcos’altro, allora devi usare ngTrueValue e ngFalseValue (che supportano solo le stringhe in questo momento), o scrivere la tua direttiva.

    Cosa stai cercando di fare esattamente? Se si desidera che la prima casella di controllo sia selezionata per impostazione predefinita, è necessario modificare il modello: item1: true,

    Modifica: non devi inviare il modulo per eseguire il debug dello stato corrente del modello, btw, puoi semplicemente scaricare {{testModel}} nel tuo HTML (o

    {{testModel|json}}

    ). Anche i tuoi attributi ngModel possono essere semplificati in ng-model="testModel.item1" .

    http://plnkr.co/edit/HtdOok8aieBjT5GFZOb3?p=preview

    Puoi usare ng-value-true per dire angular che il tuo ng-model è una stringa.

    Potrei ottenere il valore ng-true-value solo se aggiungo le virgolette extra come in questo modo (come mostrato nei documenti Angular ufficiali – https://docs.angularjs.org/api/ng/input/input%5Bcheckbox%5D )

     ng-true-value="'1'" 

    Quello che potresti fare è usare ng-repeat passa il valore di qualunque cosa stai iterando su ng-checked e da lì utilizzando ng-class per applicare i tuoi stili a seconda del risultato.

    Ho fatto qualcosa di simile di recente e ha funzionato per me.

    Si può dichiarare che anche in-ng-init si sta avverando

     < !doctype html>    AngularJS Plunker       


    E puoi selezionare anche il primo e l’object mostrato qui true, false, flase

    Le direttive ng-model e ng-checked non dovrebbero essere usate insieme

    Dai documenti:

    ngChecked

    Imposta l’attributo checked sull’elemento, se l’espressione all’interno di ngChecked è true.

    Si noti che questa direttiva non deve essere utilizzata insieme a ngModel , in quanto ciò può portare a comportamenti imprevisti.

    – Riferimento API Direttiva AngularJS ng


    Impostare invece il valore iniziale desiderato dal controller:

      Testing
    Testing 2
    Testing 3
     $scope.testModel = { item1: true };