- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前正在编写 Ionic 2 应用程序并创建了以下自定义组件:
import {Component, EventEmitter} from 'angular2/core';
import {Button, Icon, Item} from 'ionic-angular';
import {DatePicker} from 'ionic-native';
import {HSDatePipe} from '../pipes/custom-dateformat.pipe';
@Component({
selector: 'date-picker',
directives: [Button, Icon, Item],
inputs: ['date', 'dateFormat', 'mode'],
outputs: ['onUpdate'],
pipes: [HSDatePipe],
template: `<button clear (click)="selectDate()">
{{date | hsDate:dateFormat}}
</button>`
})
export class HSDatePicker {
date:any;
dateFormat:any;
label:string;
mode:string;
onUpdate:any = new EventEmitter();
constructor() {
}
selectDate() {
let self:any = this;
let previousDate:any = self.date;
DatePicker.show({
date: new Date(self.date),
mode: self.mode
})
.then(
(date:any) => {
if (!date) {
date = previousDate;
}
self.onUpdate.emit(date);
},
err => {
console.log('error -', err);
}
);
}
}
在调用此组件的页面上,我将其包含在页面中,如下所示:
<date-picker item-right [date]="period.dateEnd" [dateFormat]="'HH:mm'" [mode]="'time'" (onUpdate)="dateChange($event, 'dateEnd')"></date-picker>
dateChange
函数如下所示:
dateChange(e, selector) {
let newDate = moment(e);
this.transactionFilter[selector] = newDate;
}
当我使用该组件选择新日期时,该函数如我所料被调用,并且 transactionFilter 对象被更新。但是, View 不会更新,它仍然会在页面上显示旧日期,直到我单击按钮或聚焦输入等。
我认为问题与 DatePicker 插件或 promise 有关,因为如果我像这样更改 selectDate()
函数,它会正常更新。
selectDate() {
let self:any = this;
self.onUpdate.emit(new Date());
}
有没有办法强制更新 View ,或者我应该以某种方式进行更新?
感谢您的帮助。
编辑:主页模板
@Page({
template: `
<ion-content>
<ion-toolbar primary class="subheader">
<ion-title>Transaction Viewer Filter</ion-title>
</ion-toolbar>
<ion-list>
<ion-item>
<ion-icon name="calendar" item-left></ion-icon>
From
<date-picker item-right [date]="transactionFilter.fromDate" [dateFormat]="'DD/MM/YYYY HH:mm'" [mode]="'datetime'" (onUpdate)="dateChange($event, 'fromDate')"></date-picker>
</ion-item>
<ion-item>
<ion-icon name="calendar" item-left></ion-icon>
To
<date-picker item-right [date]="transactionFilter.toDate" [dateFormat]="'DD/MM/YYYY HH:mm'" [mode]="'datetime'" (onUpdate)="dateChange($event, 'toDate')"></date-picker>
</ion-item>
<ion-item>
Count: {{count}}
</ion-item>
</ion-list>
<ion-row>
<ion-col>
<button class="close-modal" (click)="close()" danger block>Close</button>
</ion-col>
<ion-col>
<button class="save-modal" (click)="save()" favorite block>Save</button>
</ion-col>
</ion-row>
</ion-content>`,
directives: [HSDatePicker]
})
最佳答案
我认为这是因为 Angular2 根据引用而不是值检测变化。如果检测到新的日期实例,将更新 View 。如果它是同一个实例但其内容已更新,则 View 不会更新。
我会像这样重新创建一个新日期:
DatePicker.show({
date: new Date(self.date),
mode: self.mode
})
.then(
(date:any) => {
if (!date) {
date = previousDate;
}
self.onUpdate.emit(new Date(date.getTime()));
},
err => {
console.log('error -', err);
}
);
编辑
您可以尝试在区域中执行您的处理:
export class HSDatePicker {
date:any;
dateFormat:any;
label:string;
mode:string;
onUpdate:any = new EventEmitter();
constructor(private ngZone:NgZone) { // <-------
}
selectDate() {
this.ngZone.run(() => { // <------
let self:any = this;
let previousDate:any = self.date;
DatePicker.show({
date: new Date(self.date),
mode: self.mode
})
.then(
(date:any) => {
if (!date) {
date = previousDate;
}
self.onUpdate.emit(date);
},
err => {
console.log('error -', err);
}
);
});
}
关于cordova - Ionic/Angular 2 组件事件发射器不更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37073345/
我是 Arduino 和这个论坛的新手,这是我除了教程之外的第一个 Arduino 项目。 我正在尝试使用遥控发射器/接收器和 Arudino 来控制伺服。我使用 Arduino 而不是将伺服器直接连
我喜欢听一个特定的广播,我用 vlc 给自己做了一个小发射器,就像这样: #!/bin/sh vlc http://mp3lg.tdf-cdn.com/fip/all/fiphautdebit.mp3
是否有用于发出 YAML 的 C++ 库?维基百科提到了 libyaml 的 c++ 包装器,但链接已断开。 YAML官方网站只提供yaml-cpp ,这也在 this 中提出所以问题,但 cpp-y
我正在尝试将我的 iPhone 设置为广播 iBeacon 信号以供另一部 iPhone 接收。本应接收信号的 iPhone 可以正常工作,但我无法让另一部 iPhone 广播信号。 我正在学习本教程
我正在编写一个网络应用程序,其中多个监听器(Evcentsource SSE 客户端 JS)将连接到我的服务器。我想做的是 为每个连接的监听器存储 SSE 发射器:可以在内存中或通过为每个客户端分配
我想在后端进行串行工作。我想选择 geo_unit 并做另一项工作并向客户端写入响应。 我读了 http://nodejs.org/docs/v0.4.7/api/events.html#events
我从早期就使用 BIRT,但仍然有关于 PDF 发射器的谜语。 短篇小说 : 我可以配置 fontsConfig.xml 以从相对路径或 jar 加载字体吗? 长话: 我们同时使用 FOP 和 BIR
今天我得到了一些很酷的 radio 接收器和发射器,问题是当我输入我想发送的消息时,它会在另一个 arduino 上吐出乱码。 //transmitter #include void setup()
我有一个使用 html canvas 函数创建的形状(四分之一圆): 移动到 LineTo QuadraticCurveTo 如何将形状爆炸成粒子,然后将它们返回形成一个圆圈? 最佳答案 我不会为您编
我正在实现自定义 Birt 发射器,我需要知道单元格、表格或网格的宽度和高度(以像素或点为单位)。如果未在报表设计器中明确设置度量,则会出现此问题。 我试图通过调用 cellContent.getWi
我将给出我正在尝试做的事情的一个小前提。我有一个游戏概念,需要多个玩家围坐在一张 table 旁,有点像扑克牌。 不同播放器之间的正常交互,通过socket.io结合node js很容易处理。 我很难
我是一名优秀的程序员,十分优秀!