- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 Geocoder API,当返回结果时,双向数据绑定(bind)不起作用。数据只是不在 View 内刷新。如果我手动更改任何其他属性,数据就会刷新...因此,我在谷歌上搜索(很多)并找到了一个使用 ngZone
的解决方案。这是我所做的:
getLocation(address: string): void {
var mygc = new google.maps.Geocoder();
this._ngZone.runOutsideAngular(() => {
mygc.geocode({
'address': address
}, (results, status) => {
var data: any = results[0];
this._ngZone.run(() => {
this.myObject.myData = {
lat: data.geometry.location.lat(),
lng: data.geometry.location.lng()
};
});
});
});
}
所以我有几个问题:
ngZone
?文档非常松散...runOutsideAngular()
的情况下也能正常工作,那么使用它有什么意义呢?该示例也包括此函数调用,因此我也实现了它。但是没有它它也能工作......myObject
?谢谢!
最佳答案
如果我错了,有人会开枪打我,但据我所知,如果在加载 zone.js
后下载外部脚本,则需要使用它。这意味着该脚本内的任何更改都不会被更改检测检测到。这是稍后加载谷歌地图时发生的情况。也许……
无论如何,如果是这种情况,那么您必须使用 ngZone.run
方法。
如果你想手动运行变化检测之外的东西,所以如果你想强制不触发它,你应该使用runOutsideAngular
。这不是您的用例,因此您可以安全地删除它。
The most common use of this service is to optimize performance when starting a work consisting of one or more asynchronous tasks that don't require UI updates or error handling to be handled by Angular. Such tasks can be kicked off via runOutsideAngular and if needed, these tasks can reenter the Angular zone via run.
但另一方面,您提到双向数据绑定(bind)对您不起作用 (ngModel
)。我认为真正的问题是您更新现有对象的属性。这本身不会触发双向变化检测,并且是 ngZone.run
工作的实际原因。如果是这种情况,则 changeRef.detectChanges
将不起作用,您最好使用 ApplicationRef
并执行 tick()
。或者不使用双向数据绑定(bind)并使用 data goes down, events go up
模式。
constructor(private appRef: ApplicationRef){}
getLocation(address: string): void {
let mygc = new google.maps.Geocoder();
mygc.geocode({
'address': address
}, (results, status) => {
let data: any = results[0];
this.myObject.myData = {
lat: data.geometry.location.lat(),
lng: data.geometry.location.lng()
};
this.appRef.tick();
});
}
这显然有效,因为它与 ngZone.run
没有什么不同。但未触发更改检测的主要原因是 google.maps
使用其自己的事件集/addEventListener 调用。这些事件 - 不是 - 由 zone.js
修补的所谓猴子,因此不会在 Angular 区域中运行,这在逻辑上不会触发更改检测周期。
因此,您可以使用 ngZone.run
选项或 ApplicationRef.tick
来解决此问题。我认为 ngZone.run
最有意义,因为它允许您(重新)进入 Angular 区域,这正是您想要的。
关于 NgZone
的“好”读物,您可以查看 api
关于Angular2 - ngZone - google.maps 不会触发更改检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42000337/
我有几个系统使用 docker-compose 并且没有问题。 但是,我在这里有一个“向下”根本不做任何事情的地方。 'up'虽然完美。这是在 MacOS 上。 该项目的昵称是“ Storm ”,脚本
解释起来确实很奇怪,所以就这样...... 我正在从 phpmyadmin 获取包含未转义单引号的数据。我正在尝试转换'至'通过使用Content-Type: text/html;在 php
伙计们?在这里需要一些帮助。我使用委托(delegate)协议(protocol)将一些字符串从“第二个 View Controller ”传回给它的前一个。 我的数组附加了我在委托(delegate
我有以下 eval() 东西: c = Customer() eval("c.name = row.value('customer', '{c}')".format(c=column_name), {
我写了这个测试类: @ContextConfiguration(locations = { "classpath:/test/BeanConfig.xml" }) public class Candi
我这样写代码: @ContextConfiguration(locations = { "classpath:/test/BeanConfig.xml" }) @RunWith(SpringJUnit
假设我更改了文件,然后进行 pull 。 Git 会报错,因为本地仓库还没有保存,将被覆盖。如果我然后删除该添加并使文件与以前相同(与远程 repo 相同),那么会发生 pull 吗? 最佳答案 是的
前言 很多同学将虚拟列表当做亮点写在简历上面,但是却不知道如何手写,那么这个就不是加分项而是减分项了。在上一篇文章欧阳教会你 如何实现一个定高虚拟列表 ,但是实际项目中更多的是不定高虚拟列表,这篇文
我正在阅读《Java for Dummies》一书,但遇到了问题。我不明白为什么 @Override 不起作用。我确信这与我的代码有关,因为我之前已经获得了一个多态数组来使用覆盖,但它对我来说太简单了
我从我的项目中提取了这段代码,因为我试图找到我犯的一个错误,该错误使我的 BeginStoryboard 无法自行停止。我尽可能地简化了代码,但仍然没有发现问题。你认为它可能是什么?
这个问题在这里已经有了答案: Difference between char[] and char * in C [duplicate] (3 个答案) 关闭 7 年前。 我想我知道自己问题的答案,
我一直在使用 java 的 Scanner 类时遇到问题。我可以让它很好地读取我的输入,但问题是当我想要输出一些东西时。给定多行输入,我想在完全读取所有输入后只打印一行。这是我用来读取输入的代码:
对于这个问题,我已经用最简单的术语表达了这一点。 如果元素被点击,'active'类被添加到元素,'active'类从其他元素中移除。 但是,如果该元素是“事件的”并且它被第二次单击,则“事件”类不应
这会在桌面上创建一个新文件夹,但不会将文件夹 .pfrom 的内容 move 到文件夹 .pTo。 int main() { SHFILEOPSTRUCT sf = {0}; TCHA
我有一个关于多线程调试 DLL (/MDd) 和多线程调试 (/MTd) 设置的问题。它们之间的区别很明显:一个是使用动态库,一个是使用静态库。当我使用/MDd 编译我的程序时,一切都进行得很好。但是
我的问题是,如果我在页面加载时创建一个克隆变量,jQuery 只会 append 它一次。奇怪! Click to copy This is an element! $(document)
所以...我是一个开发 django 应用程序的新手,但是当我尝试通过 virtualbox heroku 运行 heroku run python manage.py syncdb 时,它一直在下面
我在 Spring Boot 初始化时遇到了问题。我在一个简单的 Spring Boot 项目中有这个结构。 com.project.name |----App.java (Annoted with
我在 www.7hermanosmx.com/menu.php 页面上有以下代码 - 一切正常,除了黄色框(类 menuholder)应该每行三个相互 float 。他们坚决拒绝这样做!我知道我做错了
我正在尝试在我正在构建的小型网站上添加一个下拉菜单。出于某种原因,我可以获得我想要向下滑动到 fadeOut() 的 div 并执行其他类似的操作,但我无法将它获取到 slideDown()。我不知道
我是一名优秀的程序员,十分优秀!