Me referí a esto antes de hacer esta pregunta.
AngularJs no enlaza ng-comprobado con ng-model
Si ng-checked
se evalúa a true
en el html
lado, el ng-model
no se actualiza. No puedo ng-repeat
como se sugiere en la pregunta anterior porque tengo que usar algunos estilos para cada casilla de verificación.
Aquí está el plunker que he creado para ilustrar mi problema.
http://plnkr.co/edit/YsOsPh3vjkPMUUDa6r2t
Para ver lo que quiero, abra la consola y haga clic en el Submit
botón. No marques ninguna casilla de verificación.
¡Gracias por adelantado!
ng-checked
se calcula como verdadero mediante una expresión. Para indicarng-model
que no está vinculado, usé verdadero allí. Al iniciar el controlador, quiero que todas las casillas de verificación estén desmarcadas. Después de una solicitud ajax, calculong-checked
para marcar la casilla de verificación. Esto es cuando ming-model
no está actualizado.ngChecked
. Su modelo está bien, solo necesita configurartestModel.item1 = true
su devolución de llamada ajax y luego llamar$scope.$apply()
para actualizar su vista.ng-checked
en lugar deng-model
... ¡nunca más!Puede usar ng-value-true para decirle a angular que su ng-model es una cadena.
Solo podría hacer que ng-true-value funcione si agregué las comillas adicionales así (como se muestra en los documentos oficiales de Angular: https://docs.angularjs.org/api/ng/input/input%5Bcheckbox%5D )
ng-true-value="'1'"
fuente
Lo que podría hacer es
ng-repeat
pasar el valor de lo que sea que esté iterandong-checked
y desde allí utilizarng-class
para aplicar sus estilos según el resultado.Hice algo similar recientemente y funcionó para mí.
fuente
Puede declarar como el ng-init también se vuelve cierto
<!doctype html> <html ng-app="plunker" > <head> <meta charset="utf-8"> <title>AngularJS Plunker</title> <script>document.write('<base href="' + document.location + '" />');</script> <link rel="stylesheet" href="style.css"> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.js"></script> <script src="app.js"></script> </head> <body ng-controller="MainCtrl" ng-init="testModel['item1']= true"> <label><input type="checkbox" name="test" ng-model="testModel['item1']" /> Testing</label><br /> <label><input type="checkbox" name="test" ng-model="testModel['item2']" /> Testing 2</label><br /> <label><input type="checkbox" name="test" ng-model="testModel['item3']" /> Testing 3</label><br /> <input type="button" ng-click="submit()" value="Submit" /> </body> </html>
Y puede seleccionar el primero y el objeto también se muestra aquí verdadero, falso, flase
fuente
ngInit
. Se puede abusar de esta directiva para agregar cantidades innecesarias de lógica a sus plantillas. Consulte la referencia de la API de la directiva AngularJS ng-init .Las directivas
ng-model
yng-checked
no deben usarse juntasDe los Docs:
En su lugar, establezca el valor inicial deseado desde el controlador:
<input type="checkbox" name="test" ng-model="testModel['item1']" ̶n̶g̶-̶c̶h̶e̶c̶k̶e̶d̶=̶"̶t̶r̶u̶e̶"̶ /> Testing<br /> <input type="checkbox" name="test" ng-model="testModel['item2']" /> Testing 2<br /> <input type="checkbox" name="test" ng-model="testModel['item3']" /> Testing 3<br /> <input type="button" ng-click="submit()" value="Submit" />
$scope.testModel = { item1: true };
fuente
No necesita
ng-checked
cuando lo usang-model
. Si está realizando CRUD en su formulario HTML, simplemente cree un modelo para elCREATE
modo que sea coherente con suEDIT
modo durante el enlace de datos:Modo CREAR: modelo solo con valores predeterminados
$scope.dataModel = { isItemSelected: true, isApproved: true, somethingElse: "Your default value" }
Modo EDITAR: modelo de la base de datos
$scope.dataModel = getFromDatabaseWithSameStructure()
Entonces, ya
EDIT
sea enCREATE
modo o , puede utilizar constantemente sung-model
para sincronizar con su base de datos.fuente