随着AngularJS V1.7的发布,已经不建议使用和删除将绑定预先分配给的选项:
由于38f8c9,指令绑定在构造函数中不再可用。
迁移代码:
- 如果指定
$compileProvider.preAssignBindingsEnabled(true),则需要首先迁移代码,以便将标志翻转到false。有关如何执行此操作的说明,请参见 “从1.5迁移到1.6”指南。之后,删除该$compileProvider.preAssignBindingsEnabled(true)语句。
由于bcd0d4的缘故,默认情况下在控制器实例上禁用了预分配绑定。 强烈建议迁移您的应用程序,使其不尽快依赖它。
依赖于存在的绑定的初始化逻辑应该放在控制器的
$onInit()方法中,保证在分配了绑定之后总是调用该方法。
将代码移至$onInit生命周期挂钩的用例是什么?什么时候才能将代码保留在控制器构造函数中?
angularjs angularjs-directive angularjs-components angularjs-1.7
AngularJS 1.2 和 1.6 之间发生了一些事情来颠倒顺序ng-click并ng-change触发。
我做了一个 plunk 来说明它:http ://plnkr.co/edit/XgbgLSuP1znhWszeyiHd? p= preview
此页面的默认设置是使用Angular 1.2.28. 在这种情况下,如果您更改示例中的单选按钮,您将看到 click 事件在 change 事件之前触发。
如果您随后切换注释以便使用 Angular 1.6.10,您将看到 change 事件现在在 click 事件之前触发。
在 AngularJS 的开发过程中发生了什么导致这种情况,有没有办法在使用更新版本的 AngularJS 的同时保留以前的行为?
非常感谢您提供的任何帮助!
编辑:我可能应该说为什么这很重要。我希望能够在变量更改之前检查它的值,以查看是否应该允许更改。我能够ng-click在 AngularJS 1.2 上做到这一点,但是因为ng-change它首先在 AngularJS 1.6 上被触发,所以在我决定是否应该继续之前已经进行了更改。如果您对我如何使用 AngularJS 1.6 实现这一点有其他想法,我很想听听他们的意见。
尝试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
Run Code Online (Sandbox Code Playgroud)
调用代码如下所示:
/*
* 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 …Run Code Online (Sandbox Code Playgroud)