4

尝试gulp serve在我的 AngularJS(版本 1.6.10)应用程序上执行操作时收到以下错误消息:

Error: [$injector:modulerr] Failed to instantiate module myAppName due to:
$compileProvider.preAssignBindingsEnabled is not a function
@http://localhost:9805/app/scripts/app.js:43:9
invoke@http://localhost:9805/lib/angular/angular.js:5108:16
runInvokeQueue@http://localhost:9805/lib/angular/angular.js:4997:11
loadModules/<@http://localhost:9805/lib/angular/angular.js:5007:11
forEach@http://localhost:9805/lib/angular/angular.js:387:11
loadModules@http://localhost:9805/lib/angular/angular.js:4987:5
createInjector@http://localhost:9805/lib/angular/angular.js:4904:19
doBootstrap@http://localhost:9805/lib/angular/angular.js:1936:20
bootstrap@http://localhost:9805/lib/angular/angular.js:1957:12
angularInit@http://localhost:9805/lib/angular/angular.js:1842:5
@http://localhost:9805/lib/angular/angular.js:35431:5
mightThrow@http://localhost:9805/lib/jquery/dist/jquery.js:3534:21

调用代码如下所示:

 /*
 * Main module of the application.
 */
angular
    .module('dataPipelineApp', [
        //various parameters
    ])
    .config(['$compileProvider', '$httpProvider', '$breadcrumbProvider', function ($compileProvider, $httpProvider, $breadcrumbProvider) {
        //initialize get if not there
        if (!$httpProvider.defaults.headers.get) {
            $httpProvider.defaults.headers.get = {};
        }
        $compileProvider.preAssignBindingsEnabled(true); //err here
    $httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';
    // extra
    $httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
    $httpProvider.defaults.headers.get['Pragma'] = 'no-cache';

    $compileProvider.debugInfoEnabled(false); // speed up angular performance to not print debug info;
    $breadcrumbProvider.setOptions({
        templateUrl: 'app/views/headerBar.html'
    });
    //$httpProvider.defaults.headers.common['Access-Control-Allow-Origin'] = '*';
    $httpProvider.interceptors.push("AddToken");
    $httpProvider.interceptors.push("UnauthorizeInterceptor");
}])

类似的搜索似乎坚持认为这是一个版本差异。对这个问题的类似搜索似乎也表明角度模拟的版本控制存在问题,但是我们根本没有使用角度模拟。我已经尝试将我的 Angular 降级到 1.5.5,其他搜索表明你不能超过 - 尽管我所有的同事都在 Angular 1.6.10 或更高版本上运行它。我也尝试使用 npm 安装 angular-mocks,尽管没有使用,并同步版本以匹配我们的 Angular,但无济于事。我真的不知道该怎么做,也不知道实际发生了什么,为什么找不到那个功能?

编辑:我还检查了浏览器,通过运行搜索使用控制台进行angular.version搜索 - 尽管我重做gulp build并且gulp inject serve在 npm 安装旧版本之后,它还是将 1.7.2 作为我的 Angular 版本。似乎没有正确选择正确的版本 - 我是否缺少某些东西来强制执行降级的安装?

4

2 回答 2

5

$compileProvider.preAssignBindingsEnabled标志在 AngularJS V1.6 中已弃用,并已从 AngularJS V1.7 中删除。

AngularJS 团队强烈建议尽快迁移您的应用程序以使其不依赖它。AngularJS V1.6 于 2018 年 7 月 1 日终止。

从文档:

由于38f8c9,构造函数中不再提供指令绑定。

以前,该$compileProvider.preAssignBindingsEnabled标志是受支持的。该标志控制绑定是在控制器构造函数中可用还是仅在$onInit钩子中可用。绑定现在在构造函数中不再可用。

要迁移您的代码:

  • 如果您指定$compileProvider.preAssignBindingsEnabled(true),您需要首先迁移您的代码,以便可以将标志翻转为false. “从 1.5 迁移到 1.6”指南中提供了有关如何执行此操作的说明 。之后,删除该$compileProvider.preAssignBindingsEnabled(true)语句。

— AngularJS 开发者指南 - 迁移到 V1.7 - 编译

从文档:

由于bcd0d4,默认情况下禁用组件/指令控制器实例上的预分配绑定,这意味着它们将不再在构造函数中可用。仍然可以重新打开它,这在迁移过程中应该会有所帮助。预分配绑定已被弃用,并将在未来的版本中删除,因此我们强烈建议尽快迁移您的应用程序以不依赖它。

依赖于存在绑定的初始化逻辑应该放在控制器的$onInit()方法中,保证总是在绑定分配后调用。

— AngularJS 开发者指南 - 迁移到 1.6 - 编译

笔记:

2018 年 7 月 1 日,对 AngularJS 1.6 的支持结束。有关更多信息,请参阅AngularJS MISC - 版本支持状态

于 2018-06-19T22:56:09.463 回答
0

自 AngularJS 1.6 起不再支持它。对于仍在将他们的应用程序迁移到更新版本的 AngularJs 的人,如果您指定,$compileProvider.preAssignBindingsEnabled(true)您需要首先迁移您的代码,以便可以将标志翻转为false. 并查看本指南https://docs.angularjs.org/guide/migration#migrating-from-1-5-to-1-6

AngularJs 提交参考:https ://github.com/angular/angular.js/commit/38f8c97af74649ce224b6dd45f433cc665acfbfb

于 2019-10-04T15:32:07.253 回答