AngularJS - $compileProvider.preAssignBindingsEnabled不是一个函数

4

当我尝试在我的 AngularJS 应用程序上执行 gulp serve 时,出现以下错误消息:

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-mocks 的版本存在问题,但我们根本没有使用 angular mocks。我尝试将 Angular 降级到1.5.5,其他搜索结果建议不能超过该版本——尽管我的同事都在使用1.6.10或更高版本的 Angular。我还尝试使用npm安装angular-mocks,尽管它没有被使用,并将其版本与我们的Angular匹配,但无济于事。我真的不知道该怎么做,也不确定实际发生了什么,为什么它找不到那个函数?
编辑:我还在浏览器中进行了检查,在控制台上运行了一个angular.version搜索——它显示我的Angular版本是1.7.2,尽管我在npm安装旧版本后重新执行了gulp buildgulp inject serve。似乎它没有正确选择正确的版本——有什么我需要注意的以强制执行降级安装吗?
2个回答

6

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

AngularJS 团队强烈建议您尽快将应用程序迁移,不要依赖它。 AngularJS V1.6 在2018年7月1日结束生命周期。

来自文档:

由于 38f8c9,指令绑定现在不再在构造函数中可用。
之前,支持 $compileProvider.preAssignBindingsEnabled 标志。该标志控制了绑定是否在控制器构造函数内部可用,或者仅在 $onInit 钩子中可用。现在,在构造函数中不再可用绑定。
要迁移您的代码:
- 如果您指定了 $compileProvider.preAssignBindingsEnabled(true),则需要先迁移您的代码,以便可以将标志翻转为 false。有关如何执行此操作的说明,请参见"Migrating from 1.5 to 1.6" guide。然后,删除 $compileProvider.preAssignBindingsEnabled(true) 语句。 — AngularJS Developer Guide - Migrating to V1.7 - Compile

来自文档:

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

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

— AngularJS Developer Guide - Migrating to 1.6 - Compile

注意:

2018年7月1日,AngularJS 1.6的支持已经结束。更多信息,请参见AngularJS MISC - 版本支持状态


那么,为什么所有在至少v1.6.10上运行此代码以及运行v1.6.9的生产代码中都包含有问题的preAssignBindingsEnabled(true)代码的同事们,都能够运行并提供应用程序而没有出现此问题呢? - NateH06
你在问题中提到你正在运行 V1.7。它在 V1.6 中被弃用并在 V1.7 中被移除。 - georgeawg
如果根本没有v1.7,那就解释了一切。我的问题最初说我(打算)在v1.6上运行,(我的angular.js文件甚至在注释中有它),直到我发现我的本地副本(错误地)正在运行v1.7。我的编辑表明,我的本地副本是自安装的1.7,并且我真的想强制它保持在1.6内。我们正在迁移到React,所以我不关心v1.7,我只需要构建这个旧的笨重的东西来进行快速修复。如何强制它加载/安装Angular <v1.7? - NateH06
1
最好在一个新问题中提问。也许是“如何强制执行gulp build以使用AngularJS <v1.7进行加载/安装”。 - georgeawg

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接