Javascript 如何避免透明地创建范围对象

Javascript 如何避免透明地创建范围对象,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我正在学习使用AngularJS,并且偶然发现了一些我认为是糟糕的设计的东西 我正在遵循,并且正在重新创建给定的示例。我的代码可以在这里查看- 我担心的是,我没有在JavaScript代码中的任何地方声明user对象。但是,它在表单中的使用会透明地将它添加到作用域中(我可以在save方法中console.log它),它将无限期地保留在该作用域中。我觉得这可能会导致一些微妙的错误,你可能会认为用户对象是未定义的(因为它没有在控制器中使用过),但是它已经包含了数据 这是设计所期望的吗?难道没有更干净

我正在学习使用AngularJS,并且偶然发现了一些我认为是糟糕的设计的东西

我正在遵循,并且正在重新创建给定的示例。我的代码可以在这里查看-

我担心的是,我没有在JavaScript代码中的任何地方声明
user
对象。但是,它在表单中的使用会透明地将它添加到作用域中(我可以在
save
方法中
console.log
它),它将无限期地保留在该作用域中。我觉得这可能会导致一些微妙的错误,你可能会认为用户对象是未定义的(因为它没有在控制器中使用过),但是它已经包含了数据


这是设计所期望的吗?难道没有更干净的方法将这些“临时”模型从您的范围中分离出来吗?

这是一种设计,我不认为这是一种糟糕的设计。它非常方便,特别是在表单验证的情况下。一旦你习惯了它,我想你可能会改变你的观点。让angular创建绑定而不必遍历每个表单控件并创建你自己的范围变量/对象可以节省很多时间。然后,当准备好提交/保存时,所有表单数据在Scope中立即可用隐式变量声明是javascript的一个“功能”。对于我们这些来自静态类型语言的人来说,这确实需要一点时间来适应。这里有一篇文章,虽然专注于打字,但我认为在这里是相关的,因为我发现很多关于隐式和显式的讨论类似于静态和动态的辩论:伙计们,仅仅因为一些东西“方便”、“容易”等等,并不意味着它是好的设计。这违反了德米特定律,因为它透明地向范围提供了额外的信息。