我正在尝试通过添加Angular路由,控制器,服务等来改进此JsFiddle代码。 http://jsfiddle.net/ProLoser/bp3Qu/light/
我面临的问题是使用以下代码行
function FormBuilderCtrl(){
var scope = this;
....
当我尝试将上述内容转换为新的小提琴http://jsfiddle.net/uhsarp/MdvQk/1/
时function FormBuilderCtrl($scope){
...
现在一切都破了。我试图理解var scope =这意味着什么以及为什么将范围传递给函数是不起作用的。
此外,所有Angular指令都被指定为ng:而不是ng-(例如:ng:switch而不是ng-switch)。它们是等价的吗?感谢。
更新
我已按照答案中的建议并升级了Angular版本。我还删除了var scope = this并直接注入了scope。 http://plnkr.co/edit/Clr2T9V8J0z3oxW2HXur?p=preview
我现在面临的唯一问题是每当我将字段类型从“文本”更改为“单选按钮”时,我都会收到错误(上面的plukr页面中script.js中的第45行)
TypeError: Cannot call method 'indexOf' of undefined
我检查了代码,但似乎无法发现问题。
答案 0 :(得分:1)
你的角度版很老了。
使用最后一个:http://code.angularjs.org/1.1.5/angular.js
您还需要在身体标签(或包装div)中包含ng-app。
我无法在docs中找到任何对ng:tag样式的引用。所以,我建议您尝试使用ng-tag方法。
最后,我强烈建议您阅读developer guide,以便更好地了解如何构建应用。
答案 1 :(得分:1)
您正在运行一个非常过时的Angular版本。
我将您的fiddle分叉并将版本更新为最新版本并且猴子修补了您的脚本:
即:
function FormBuilderCtrl($scope){
var scope = $scope;
通过避免使用意大利面条编码来缓解您的开发的建议很少:
答案 2 :(得分:1)
Beteraraba说你应该使用更新版本的AngularJS是正确的。
话虽如此,这并不是它破裂的原因。
在您的示例中,var scope = this
只是将一个名为“scope”的变量引用到此处。因此,稍后在代码中将函数属性设置为“this”。例如,FormBuilderCtrl()。编辑将被设置为false,因为FormBuilderCtrl()中有一个this.editing = false;
。 var scope = this;
与Angular的$ scope无关!
如果你想使用$ scope,你需要注入它,但这会改变代码背后的想法。如果您决定这样做,您只需执行var scope = $scope
并且您的代码可以正常工作,但请记住,控制器中定义的函数和属性现在将应用于$ scope而不仅仅是控制器!