我正在使用我继承的旧版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没有其他差异。
我不认为捆绑包导致了问题,因为我在本地启用了捆绑,但我没有看到错误。我也无法看到传递给应用程序的数据导致了问题(它的客户数据,帐户数据等),因为它甚至没有在这个特定的控制器中使用。
答案 0 :(得分:2)
不要使用函数表达式语法,因为变量可以在分配之前调用。根据{{3}}使用函数声明语法。
此外,由于您要传递函数参考,请完全拔出注入片以确保您的代码安全。
var module = angular.module('myModule');
function masterController($scope, $compile) {
... // stuffs
}
masterController.$inject = ["$scope", "$compile"];
module.controller('MasterController', masterController);