1

我正在尝试通过添加 Angular 路由、控制器、服务等来改进这个 JsFiddle 代码。 http://jsfiddle.net/ProLoser/bp3Qu/light/

我面临的问题是以下代码行

function FormBuilderCtrl(){
var scope = this;
....

当我尝试将上述内容转换为这个新的小提琴http://jsfiddle.net/uhsarp/MdvQk/1/

function FormBuilderCtrl($scope){
...

现在一切都破裂了。我试图理解 var scope=this 的含义以及为什么将范围传递给函数不起作用。

此外,所有 Angular 指令都被称为 ng: 而不是 ng- (例如:ng:switch 而不是 ng-switch)。它们是等价的吗?谢谢。

更新:

我已遵循答案中的建议并升级了 Angular 版本。我还删除了 var scope = this 并直接注入了作用域。 http://plnkr.co/edit/Clr2T9V8J0z3oxW2HXur?p=preview

我现在面临的唯一问题是,每当我将字段类型从“文本”更改为“单选按钮”时,都会出现错误(上述 plukr 页面中 script.js 中的第 45 行)

TypeError: Cannot call method 'indexOf' of undefined

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

4

3 回答 3

1

Beteraraba 的说法是正确的,您可能应该使用更新版本的 AngularJS。

话虽如此,这不是它破裂的原因。

在您的示例中,var scope = this只需使一个名为“范围”的变量引用此。以便稍后在代码中将函数归因于“this”。例如,FormBuilderCtrl().editing 将设置为 false,因为this.editing = false;FormBuilderCtrl() 内部有一个。var scope = this;与 Angular 的 $scope 无关!

如果你想使用 $scope,你需要注入它,但这会改变代码背后的想法。如果你决定这样做,你可以简单地这样做var scope = $scope,你的代码将工作,但请记住,控制器中定义的函数和属性现在将应用于 $scope 而不仅仅是控制器!

于 2013-09-17T19:35:08.870 回答
1

您正在运行一个非常过时的 Angular 版本。

我分叉了你的小提琴并将版本更新到最新的稳定版,猴子修补了你的脚本:

  1. 我按预期注入 $scope
  2. 我设置了 scope = $scope 所以我不必在你的代码中全部替换它。

IE:

   function FormBuilderCtrl($scope){
     var scope = $scope;

很少有建议通过避免意大利面条式编码来简化您的开发:

  • 使用不同的文件
  • 创建一个模块并将您的控制器/指令添加到它。
于 2013-09-17T19:31:12.937 回答
1

你的角度版本很旧。

使用最后一个:http ://code.angularjs.org/1.1.5/angular.js

您还需要将 ng-app 包含在您的 body 标签中(或包装 div 中)。

我在文档中的任何地方都找不到对 ng:tag 样式的任何引用。因此,我建议您尝试使用 ng-tag 方法。

最后,我强烈建议您阅读开发者指南,以更好地了解您应该如何构建您的应用程序。

于 2013-09-17T19:30:21.087 回答