AngularJS angular-ui-router.min.js 在 BundleTable.EnableOptimizations = true 时破坏应用程序
AngularJS angular-ui-router.min.js breaks app when BundleTable.EnableOptimizations = true
我在 AngularJS 1.7.5 中有一个非常简单的项目(并尝试了 6)。
我正在使用 system.web.optimization 进行捆绑。
当运行关闭优化的项目时,它工作正常。
当我打开优化时,我得到的错误可能来自 injection/minification:
Error: $injector:modulerr Module Error
我已经从项目中删除了几乎所有的东西,当我在 angular.js 中放置一个错误断点时,我看到在出现错误之前发生的最后一次注入是 ngRoute。
我试过多个版本,包括已经缩小的版本。
我在项目中看到的所有需要它的地方都使用了 $inject。
我在 angular 的旧版本中多次使用这个项目。 (pre 1.5) 并且有效。
我已经完成了错误处理,它似乎总是在 ngRoute 或 ui-router 上中断。即使包括缩小版本。
当我删除脚本时,出现了不同的错误(很明显),即模块未包含在内。
这个项目太简单了,我无法想象我在使用 /pages/home javascript 时遇到了问题。
当 运行 在本地或发布时,打开优化时我会遇到同样的错误,所以我相当确定这是一个缩小问题我只是无法弄清楚为什么会这样正在发生。
'use strict';
angular
.module("rpApp", ['ngRoute', 'ui.router'])
.config(function ($routeProvider, $urlRouterProvider, $locationProvider)
{
$locationProvider.hashPrefix('');
$urlRouterProvider
.otherwise('/home');
$locationProvider.html5Mode(true);
})
.run(['$http', function ($http) {
}]);
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
Home Page Using Bootstrap
</div>
</div>
</div>
(function () {
angular
.module("rpApp")
.controller('homeController', homeController);
homeController.$inject = [];
function homeController() {
var vm = this;
}
})();
(function () {
'use strict';
angular.module("rpApp")
.directive('home', homeDirective);
homeDirective.$inject = [];
function homeDirective() {
return {
restrict: 'EA',
replace: true,
scope: {},
require: '?ngModel',
controller: 'homeController',
controllerAs: 'homeVm',
templateUrl: "App/pages/home/home.html",
link: function (scope, elm, atts, c) {
//dom manipulation goes in the link function
}
};
};
})();
(function () {
'use strict';
angular
.module('rpApp')
.config(configRouteHome);
configRouteHome.$inject = [
'$routeProvider',
'$locationProvider'
];
function configRouteHome($routeProvider, $locationProvider) {
$routeProvider
.when('/', {
template: '<div data-home></div>'
})
.when('/home', {
template: '<div data-home></div>'
});
$locationProvider.html5Mode(true);
}
})();
<script src="Scripts/jquery-1.10.2.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.6/angular.min.js">
</script>
<script src="//unpkg.com/@uirouter/angularjs/release/angular-ui- router.min.js"></script>
<script src="Scripts/ngRoute.min.js"></script>
<%: System.Web.Optimization.Scripts.Render("~/Bundles/angular") %>
<base href="/">
</head>
<body>
<div>
<div ng-view ng-cloak></div>
</div>
</body>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Optimization;
using System.Web.UI;
namespace Angular1._7
{
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new
ScriptBundle("~/Bundles/angular").IncludeDirectory("~/app", "*.js",
true));
bundles.Add(new
StyleBundle("~/Bundles/css").IncludeDirectory("~/app", "*.css", true));
BundleTable.EnableOptimizations = true;
}
}
}
我希望该项目能够在添加这些最少的组件的情况下进行捆绑和缩小。 (ui-router 和 ng-route)但它似乎永远不会到达 /app
看起来你的配置函数参数仍然会被缩小?
您需要使用数组注入语法(就像您对 运行 方法所做的那样)或使用 $inject.
我在 AngularJS 1.7.5 中有一个非常简单的项目(并尝试了 6)。
我正在使用 system.web.optimization 进行捆绑。
当运行关闭优化的项目时,它工作正常。
当我打开优化时,我得到的错误可能来自 injection/minification:
Error: $injector:modulerr Module Error
我已经从项目中删除了几乎所有的东西,当我在 angular.js 中放置一个错误断点时,我看到在出现错误之前发生的最后一次注入是 ngRoute。
我试过多个版本,包括已经缩小的版本。
我在项目中看到的所有需要它的地方都使用了 $inject。
我在 angular 的旧版本中多次使用这个项目。 (pre 1.5) 并且有效。
我已经完成了错误处理,它似乎总是在 ngRoute 或 ui-router 上中断。即使包括缩小版本。
当我删除脚本时,出现了不同的错误(很明显),即模块未包含在内。
这个项目太简单了,我无法想象我在使用 /pages/home javascript 时遇到了问题。
当 运行 在本地或发布时,打开优化时我会遇到同样的错误,所以我相当确定这是一个缩小问题我只是无法弄清楚为什么会这样正在发生。
'use strict';
angular
.module("rpApp", ['ngRoute', 'ui.router'])
.config(function ($routeProvider, $urlRouterProvider, $locationProvider)
{
$locationProvider.hashPrefix('');
$urlRouterProvider
.otherwise('/home');
$locationProvider.html5Mode(true);
})
.run(['$http', function ($http) {
}]);
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
Home Page Using Bootstrap
</div>
</div>
</div>
(function () {
angular
.module("rpApp")
.controller('homeController', homeController);
homeController.$inject = [];
function homeController() {
var vm = this;
}
})();
(function () {
'use strict';
angular.module("rpApp")
.directive('home', homeDirective);
homeDirective.$inject = [];
function homeDirective() {
return {
restrict: 'EA',
replace: true,
scope: {},
require: '?ngModel',
controller: 'homeController',
controllerAs: 'homeVm',
templateUrl: "App/pages/home/home.html",
link: function (scope, elm, atts, c) {
//dom manipulation goes in the link function
}
};
};
})();
(function () {
'use strict';
angular
.module('rpApp')
.config(configRouteHome);
configRouteHome.$inject = [
'$routeProvider',
'$locationProvider'
];
function configRouteHome($routeProvider, $locationProvider) {
$routeProvider
.when('/', {
template: '<div data-home></div>'
})
.when('/home', {
template: '<div data-home></div>'
});
$locationProvider.html5Mode(true);
}
})();
<script src="Scripts/jquery-1.10.2.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.6/angular.min.js">
</script>
<script src="//unpkg.com/@uirouter/angularjs/release/angular-ui- router.min.js"></script>
<script src="Scripts/ngRoute.min.js"></script>
<%: System.Web.Optimization.Scripts.Render("~/Bundles/angular") %>
<base href="/">
</head>
<body>
<div>
<div ng-view ng-cloak></div>
</div>
</body>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Optimization;
using System.Web.UI;
namespace Angular1._7
{
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new
ScriptBundle("~/Bundles/angular").IncludeDirectory("~/app", "*.js",
true));
bundles.Add(new
StyleBundle("~/Bundles/css").IncludeDirectory("~/app", "*.css", true));
BundleTable.EnableOptimizations = true;
}
}
}
我希望该项目能够在添加这些最少的组件的情况下进行捆绑和缩小。 (ui-router 和 ng-route)但它似乎永远不会到达 /app
看起来你的配置函数参数仍然会被缩小?
您需要使用数组注入语法(就像您对 运行 方法所做的那样)或使用 $inject.