angularjs - 为什么 Zone.js 会改变 AngularJS 评估属性的方式?

标签 angularjs angular zone.js angular-hybrid

我有一个同时具有 Angular (2+) 和 AngularJS (1.x) 的应用程序。我们正在使用第三方 AngularJS 库,它在链接函数中从其 attrs 数组中读取一个对象,如下所示:

//3rd party lib code:
module.directive('test', () => ({
  template: `Look at the console`,
  link(elt, scope, attrs) {
    console.log('link attrs.props', attrs.props);
  }
})) 

模板:

<!-- someObject = {name: 'foo'} -->
<test props="{{someObject}}"></test>

我们刚刚升级到最新版本的 AngularJS,我们发现了一个问题。通常,attrs.props 评估为对象的字符串表示形式。我们得到的不是字符串化对象,而是“[object Object]”

我尝试了一个最小的复制,但我无法重现问题,直到我尝试导入 Zone.js,正如您在这个 stackblitz 上看到的那样: https://stackblitz.com/edit/angularjs-attrs-test?file=app.js

如果导入了 Zone.js(Angular 2+ 需要它),那么 attrs.props 就是 "[object Object]"。没有它,attrs.props 就是 {name: 'foo'}

这是一个已知问题吗?有解决方法吗?

最佳答案

总是在加载 ZoneJS 之前加载 ZoneJS 是一个好习惯,否则可能会发生一些奇怪的问题。在你的例子中,如果你简单地将 ZoneJS 导入移动到第一行,它就解决了问题。

关于angularjs - 为什么 Zone.js 会改变 AngularJS 评估属性的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51841365/

相关文章:

javascript - 确认 DatePicker 时间更改

javascript - 如何使一个指令修改另一个指令的内容?

angular - 如何在不保留选项卡的选项卡之外设置根页面?

Angular 2 + ngrx/商店 : one-way binding to an &lt;input&gt;

mysql - 由于 Angular Universal 中的 Zone.js 服务器渲染停止工作。怎么修?

javascript - Angular JS REST API GET 不显示数据

html - Angular 在刷新时加载 HTML 索引而不是 ng-app.js

android - Ionic v2 html 根本不呈现( Angular 2)

javascript - 为什么组件在没有 `changeDetetectorRef.markForCheck` 的情况下检测不到内部状态变化?

angular - 2019 年访问 navigator.mediaDevices.getUserMedia() 的方式