我要从 Knockout 转到 Angular,但我遇到了一些问题。我假设我必须做一些非角度类型的事情。
http://jsfiddle.net/LostInDaJungle/BxELP/
I linked to jsfiddle so I didn't have to include my code here
Stack Overflow will not let me post my question without a code block.
这是一个非常基本的小提琴,概述了我的两个主要问题......
问题1:val1和val2被初始化为3和4,正确加起来为7。但是,如果您更改文本框中的任何一个值,则新值将被视为字符串,我会得到连接而不是加法。将 val1 更改为 4,当它应该是 8 时你得到 44。解决这种行为的最佳方法是什么?
问题 2:计算字段。我可以通过使用 {{val1 + val2}} 之类的大括号来获得计算字段,并在基础模型更改时自动更新计算字段,但这是完全不可接受的。在我成熟的应用程序中,我们生成了一个在整个过程中多次使用的“成本”,并且每次都必须进行成本计算是一种痛苦。更不用说当这个计算发生变化时,我现在有一项令人羡慕的任务,即找到 15 个使用成本计算的不同地方并将它们全部更新。
此外,如果我尝试使用大括号将 ng-model="cost" 放在输入上,则大括号不起作用。因此,我没有什么可以作为约束成本的方式。
http://jsfiddle.net/LostInDaJungle/QNVwe/
这个例子更像我想要的结构。但是,与 ko.observable 不同的是,计算字段不会在生成它们的值更改时更新。每个人都强加给我的样板解决方案是编写一堆 ng-change 处理程序......但这太糟糕了。如果宽度变化改变了成本并改变了回报计算,等等......它很快就会变成一团糟。
就将逻辑与表示分离而言,这两种方法都失败了。方法一将我的业务逻辑嵌入到我的 HTML 中。方法二在我的代码中放置了一大堆 ng-change 处理程序,这与必须用普通的 HTML 编写一大堆 onChange 处理程序没有太大区别。如果我必须做一堆 ng-change 处理程序,我会尽快在 Javascript 中做一个 onChange 处理程序,因为我至少可以在我的表示层之外声明它们。
这是相同的淘汰版:
http://jsfiddle.net/LostInDaJungle/eka4S/2/
这更像我所期望的......除了我的输入上的数据绑定,所有程序逻辑都很好地包含在视图模型中。此外,由于我的可计算是一个 Javascript 函数,我不必为如何确保我的两个值是数字而挠头。
所以....
计算变量:有没有办法观察基础变量并自动更新计算量?无需将我的程序逻辑隐藏在我的 HTML 中?
有什么好方法可以防止我的数字变成字符串吗?
谢谢您的帮助。
仅供参考,也发布到 Google 群组:https ://groups.google.com/forum/#!topic/angular/0dfnDTaj8tw