我正在使用继承的旧版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没有其他差异。
我认为在本地启用捆绑功能时,捆绑程序不会引起此问题,并且看不到错误。我也看不到传递给应用程序的数据引起了问题(它是客户数据,帐户数据等),因为它甚至没有在此特定控制器中使用。
不要使用函数表达式语法,因为可以在分配变量之前调用该变量。改用最佳实践指南中的函数声明语法。
另外,由于您正在传递函数引用,因此请完全拉出注入部分以确保您的代码具有最小化安全性。
var module = angular.module('myModule');
function masterController($scope, $compile) {
... // stuffs
}
masterController.$inject = ["$scope", "$compile"];
module.controller('MasterController', masterController);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句