AngularJS范围问题

时间:2013-09-17 19:17:38

标签: javascript angularjs

我正在尝试通过添加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

我检查了代码,但似乎无法发现问题。

3 个答案:

答案 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分叉并将版本更新为最新版本并且猴子修补了您的脚本:

  1. 我按预期注入$ scope
  2. 我设置范围= $ scope,所以我不必在代码中全部替换它。
  3. 即:

       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而不仅仅是控制器!