交换AngularJS语法导致错误

时间:2015-08-26 13:44:21

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

所以我一直在制作网站一段时间,但只是显示和信息的真正东西。我以为我会和AngularJs一起去,所以我按照了codechool上的指南。当我基于在线文档意识到我不会推荐使用的语法时,我已经在应用程序上工作了一天或两天。当我尝试转换它时,我得到一个错误。 这是我以前的工作代码:

(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

我会非常感激任何人都可以提供的任何帮助,因为我正在用这个来拉我的头发。

谢谢!

2 个答案:

答案 0 :(得分:1)

我不明白为什么你认为你的第一个片段更糟糕。它使用IIFE模式。 IIFE允许避免污染全球背景,它们通常用于Angular。

为了使您的第二个代码段正常工作,请删除封闭功能:

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

请注意,您的第二个代码段中的函数周围没有括号。因此,它被视为函数声明,而不是立即调用的函数表达式(IIFE)。尝试正确地包含该功能:

(function() {

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

    function BuildController(){
        // ...
    }
})();

答案 1 :(得分:0)

我建议你jonhpapa-angular-styleguide,正确的语法是:

 (function() {
        'use strict';

        angular
            .module('MODULENAME')
            .controller('NameCtrl', Controller);


        /* @ngInject */
        function Controller() {
            var vm = this;
            vm.title = 'Controller';

            activate();

            ////////////////

            function activate() {
            }
        }
    })();