【发布时间】:2015-03-29 07:33:42
【问题描述】:
我正在使用 Angular、Express、Node、mySQL 堆栈设置应用程序,但在绑定复选框的值时遇到问题。 mySQL 将布尔值存储为一点,因此 json 响应返回 { done: 1 },但是 angular 似乎只接受布尔值或字符串值以绑定到 true/false。
我有以下模型(我也尝试将 done 定义为 DataTypes.BOOLEAN 无济于事):
var Todo = sequelize.define('todos', {
text: DataTypes.STRING,
done: DataTypes.INTEGER
})
我的代码将该模型的值设置为:
{"todos":[
{"id":1,"text":"add my first todo","done":1},
{"id":2,"text":"Get the done toggle working","done":0}
]}
最后在我看来我有这个代码(我正在使用玉):
li(ng-repeat="todo in todos")
input(type="checkbox", ng-model='todo.done')
{{todo.text}}
但是该复选框未被选中。我尝试添加 ng-true-value 但由于它只接受字符串值,我无法将 true 设置为整数。
如何让 Angular 使用数据库存储的位值?
更新:我已更新我的节点服务器,将 done 的值转换为运行良好的布尔值。这是推荐的解决方案还是有更好的方法来实现这一点? (这个解决方案对我来说有点hacky,我觉得必须有一个内置的方法来完成这个而不重写节点中的服务器响应)
todos.retrieveAll(function(todos) {
if(todos) {
todos.forEach(function(todo) {
todo.done = Boolean(todo.done);
});
res.json({
todos: todos
});
} else {
res.send(401, "No todos found");
}
}, function(err) {
res.send(501, "Error retrieveing todos. Message: " + err);
console.log("Error: " + err);
});
【问题讨论】:
标签: mysql angularjs data-binding