【问题标题】:Swapping AngularJS syntax causing an error交换 AngularJS 语法导致错误
【发布时间】:2015-08-26 13:44:20
【问题描述】:

所以我制作网站已经有一段时间了,但只是为了展示和信息。我以为我会尝试使用 AngularJs,所以我按照 codeschool 上的指南进行操作。当我根据在线文档意识到不推荐我使用的语法时,我在该应用程序上工作了一两天。当我尝试转换它时,我得到一个错误。 这是我的旧工作代码:

(function(){
    var angular.module('builder', []) = angular.module('builder', []);

    app.controller('BuildController', function(){
        this.sections = sectionArray;
    });

})();

我也改了:

function() {

        angular.module('builder', []).controller('BuildController', BuildController);

        function BuildController(){
            this.sections = sectionArray;
        }
}();

还有更多,但这是一个简单的示例,因为我遇到了 BuildController 错误。这是我收到的错误:

Error: [ng:areq] http://errors.angularjs.org/1.4.4/ng/areq?p0=BuildController&p1=not%20a%20function%2C%20got%20undefined
    at Error (native)
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js:6:416
    at pb (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js:22:41)
    at Sa (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js:22:128)
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js:80:25
    at N (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js:59:447)
    at K (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js:60:287)
    at g (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js:54:326)
    at g (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js:54:349)
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js:53:388

我将非常感谢任何人可以提供的任何帮助,因为我正在为此努力。

谢谢!

【问题讨论】:

    标签: javascript angularjs syntax angularjs-controller angularjs-module


    【解决方案1】:

    我不明白为什么你认为你的第一个 sn-p 更糟。它使用IIFE 模式。 IIFE 可以避免对全局上下文的污染,它们通常用于 Angular。

    为了让你的第二个 sn-p 工作,删除封闭函数:

    angular.module('builder', [])
        .controller('BuildController', ['$scope', function ($scope) {
            $scope.sections = [];
        }]);
    

    请注意,您的第二个代码 sn-p 中的函数周围没有括号。因此,这被视为函数声明,而不是立即调用的函数表达式 (IIFE)。尝试正确封装函数:

    (function() {
    
        angular.module('builder', []).controller('BuildController', BuildController);
    
        function BuildController(){
            // ...
        }
    })();
    

    【讨论】:

    • 我认为它更糟糕的原因是因为我在这里阅读:github.com/johnpapa/angular-styleguide#style-y022 但如果第一个语法不是那么糟糕,我可能会坚持使用它,因为我更熟悉它。跨度>
    • 阅读愉快!但请仔细阅读:github.com/johnpapa/angular-styleguide#iifeNote: For brevity only, the rest of the examples in this guide may omit the IIFE syntax.
    • 我想我会坚持使用 sn-p 1 语法,如果我决定以后需要一个不眠之夜,我会尝试将其全部移植。伙计,当你第一次开始时,这东西很难!非常感谢您的帮助
    • 只需将一个函数包装到括号中,看看会发生什么;)
    【解决方案2】:

    我推荐你jonhpapa-angular-styleguide,正确的语法是:

     (function() {
            'use strict';
    
            angular
                .module('MODULENAME')
                .controller('NameCtrl', Controller);
    
    
            /* @ngInject */
            function Controller() {
                var vm = this;
                vm.title = 'Controller';
    
                activate();
    
                ////////////////
    
                function activate() {
                }
            }
        })();
    

    【讨论】:

      猜你喜欢
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多