在提出这个问题之前我曾提到这一点。
AngularJs doesn't bind ng-checked with ng-model
如果ng-checked
评估true
html
ng-model
,则不会更新ng-repeat
。我无法按照上述问题的建议Submit
,因为我必须为每个复选框使用一些样式。
以下是我创建的用于说明问题的插件。
http://plnkr.co/edit/YsOsPh3vjkPMUUDa6r2t
要查看我想要的内容,请打开控制台,然后点击{{1}}按钮。请不要勾选任何复选框。
提前致谢!
答案 0 :(得分:120)
ngModel
和ngChecked
并不意味着一起使用。
ngChecked
期待一个表达式,所以通过说ng-checked="true"
,你基本上是说默认情况下将始终选中该复选框。
您应该能够使用ngModel
,绑定到模型上的布尔属性。如果你想要别的东西,那么你需要使用ngTrueValue
和ngFalseValue
(现在只支持字符串),或者编写自己的指令。
你正在尝试做什么?如果您只想在默认情况下选中第一个复选框,则应更改模型 - item1: true,
。
编辑:您不必提交表单来调试模型的当前状态,顺便说一句,您只需将{{testModel}}
转储到HTML(或<pre>{{testModel|json}}</pre>
)即可。此外,您的ngModel
属性可以简化为ng-model="testModel.item1"
。
答案 1 :(得分:11)
您可以使用ng-value-true告诉angular您的ng-model是一个字符串。
如果我添加了类似的额外引号,我只能获得ng-true-value工作(如官方Angular文档中所示 - https://docs.angularjs.org/api/ng/input/input%5Bcheckbox%5D)
ng-true-value="'1'"
答案 2 :(得分:1)
你可以做的是使用ng-repeat
传递你正在迭代的ng-checked
的值,并从那里利用ng-class
来应用你的风格取决于结果。
我最近做了类似的事情,它对我有用。
答案 3 :(得分:1)
可以声明为ng-init也变为真实
<!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>
你可以选择第一个和对象也在这里显示true,false,flase
答案 4 :(得分:0)
ng-model
和ng-checked
指令不应同时使用从文档中:
ngChecked
如果
ngChecked
中的表达式为真,则在元素上设置选中的属性。请注意,此指令不应与
ngModel
一起使用,因为这可能导致意外行为。
相反,从控制器设置所需的初始值:
<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 };
答案 5 :(得分:0)
使用const [isConnected, setIsConnected] = useState(false);
useEffect(() => {
console.log("useEffect welcome");
const unsub = NetInfo.addEventListener(state => {
setIsConnected(state.isConnected);
});
return () => unsub();
}, []);
const getPoints = async () => {
console.log("getPoints welcome");
let points = await AsyncStorage.getItem("savedPoints");
if (!!points) {
const getEmail = async () => {
const userData = await AsyncStorage.getItem("userData");
if (userData) {
// parse converts a string to an object or array
const transformedData = JSON.parse(userData);
const { userEmail } = transformedData;
return userEmail;
}
};
const email = await getEmail();
// Give it some time to get the token and userId,
// because saveData needs them.
setTimeout(
async () => await dispatch(dataActions.saveData(email, +points)),
3000
);
await AsyncStorage.removeItem("savedPoints");
}
};
if (isConnected) getPoints();
时不需要ng-checked
。如果您要在HTML表单上执行 CRUD ,只需在数据绑定期间为ng-model
模式创建与您的CREATE
模式一致的模型即可:
EDIT
$scope.dataModel = {
isItemSelected: true,
isApproved: true,
somethingElse: "Your default value"
}
然后,无论是$scope.dataModel = getFromDatabaseWithSameStructure()
还是EDIT
模式,您都可以始终使用CREATE
与数据库同步。