角度控制器返回undefined

时间:2015-10-15 13:01:18

标签: javascript angularjs

我正在使用我继承的旧版VB.Net应用程序。 ng-app和ng-controller指令都出现在根母版页的HTML元素中:

<html runat="server" id="html" ng-controller="MasterController">

ng-app属性在页面的代码隐藏中设置。当我运行页面并查看源代码时,它会出现。该应用程序的范围是模块ng-app="myModule"

控制器是在传递给母版页中的add_load的函数中定义的,不是在正文的末尾,而是距离它不远:

Sys.Application.add_load(function () {

        var module = angular.module('myModule');
        var MasterController = function ($scope, $compile) {
            ... // stuffs
            }
        };

        module.controller('MasterController', ["$scope", "$compile", MasterController]);

    });

在本地,这工作(或似乎工作)很好,我看到控制台没有错误。但是,该应用程序现已部署到暂存环境,在该环境的浏览器控制台中,我看到了一个Angular错误:

  

[ng:areq]不是一个未定义的函数

暂存区域和我的本地环境之间几乎没有差异,这些差异主要是.Net脚本捆绑器用于连接和缩小一堆JS文件,包括Angular和应用程序使用的数据。 AFAIK没有其他差异。

我不认为捆绑包导致了问题,因为我在本地启用了捆绑,但我没有看到错误。我也无法看到传递给应用程序的数据导致了问题(它的客户数据,帐户数据等),因为它甚至没有在这个特定的控制器中使用。

1 个答案:

答案 0 :(得分:2)

不要使用函数表达式语法,因为变量可以在分配之前调用。根据{{​​3}}使用函数声明语法。

此外,由于您要传递函数参考,请完全拔出注入片以确保您的代码安全。

var module = angular.module('myModule');
function masterController($scope, $compile) {
    ... // stuffs
}

masterController.$inject = ["$scope", "$compile"];

module.controller('MasterController', masterController);