关闭日期拾取器的Angular事件检测
Angular event detection for datepicker close
我刚刚开始使用angular,我很喜欢它。我有一个UI要求将日期显示为文本,然后当你点击文本时,它会显示日期选择器。然后,当你选择一个日期,它会回到文本。听起来很简单。
我尝试了下面代码的一些变化,被编辑的对象持有一个名为editdate的值,单击文本框将其更改为true并隐藏文本并显示编辑器。这很好,问题是隐藏日期选择器。我试着在日期选择器中添加ng-blur,使框在失去焦点时隐藏起来,但这是非常断断续续的,如果它有效的话。然后我尝试了ng-Mouseleave,但是当我将鼠标指针从文本框移到日期选择器中时,该框关闭了。
<td colspan="7">
Required Date : <span ng-click="item.editdate=true; item.delayeditclose = true;" ng-show="!item.editdate">{{item.dueDate.toDateString()}}</span>
<input type="date" ng-blur="item.editdate=false" ng-click="item.switcheditdate(item.delayeditclose)" ng-show="item.editdate" class="datepick" ng-model="item.dueDate" ng-focus="selectPart(item.partNumber)" />
</td>
javascript初始化为:
for (var i = 0; i < data.items.length; i++) {
item = data.items[i];
item.showExpanded = false;
item.editdate = false;
item.delayeditclose = true;
item.switcheditdate = function (delayclose) {
if (!delayclose) {
this.editdate = !this.editdate;
this.delayeditclose = true;
}
this.delayeditclose = false;
};
items.push(item);
}
我现在已经移动到上面,这几乎完成了工作。新的问题是html5日期选择器似乎有一个x来关闭它们。这隐藏了整个盒子,而不仅仅是选择器部分。如果发生这种情况,我想显示日期的文本,而不是我现在得到的什么都没有。有人知道我如何能够捕获这个关闭事件,并恢复到文本或建议一个更好的方法来解决问题吗?
我有很多项每一个都在表的单独一行
我使用的是angular 1.3 beta 8
感谢您的关注安迪
您一无所获的原因是因为当您单击x
时发生的事情是日期值被清除,因此您的日期视图是一个空字符串。你能做的是设置一个条件,当日期为空时显示一个字符串,如"点击编辑"。
就像你上面所做的那样,一种方法是在你的日期"视图"中添加一个元素和一个标志。所以修改这个:
Required Date : <span ng-click="item.editdate=true; item.delayeditclose = true;" ng-show="!item.editdate">{{item.dueDate.toDateString()}}</span>
:
Required Date :
<span ng-click="item.editdate=true; item.delayeditclose = true;" ng-show="!item.editdate">
<span>{{item.dueDate.toDateString()}}</span>
<span ng-show="!item.dueDate">Click to Edit</span>
</span>
指令方式
现在在我看来,我认为这是更好的使用一个指令。它将简化您的逻辑,并且更容易重用。我创建了一个plunker,它显示了我使用指令的实现。
标题中问题的答案
回答你的标题所提出的问题,当使用html5日期选择器时,你无法检测它何时关闭(甚至当它打开时)。查看这个答案和链接的关于输入[type=date]的快速常见问题解答
- 在Angular ui路由器中,如何将事件从一个视图发送到另一个视图
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 在将绑定应用于控制器之后,是否会发出Angular$scope事件
- 如何在Angular Material中的md背景后面接收ng点击事件
- 是否可以在jQuery事件中更改Angular范围
- 点击事件时将新的JSON数据加载到Angular中
- 如何为angular js条形图添加事件
- Angular JS根据搜索结果和点击事件更新DOM元素
- 我是否可以使用 Angular 将鼠标向上事件绑定到文档正文
- 如何在ngDraggable angular js中停止点击事件
- 使用 jQuery 日期选择器和 Angular 2 更改事件
- 使用 Angular 和 UI-bootstrap 对模态事件绑定无法工作的指令
- 更改 Angular 2 中选择的事件在 Firefox 和 Edge 中不起作用
- 获取 Angular UI-Calendar 上的所有事件(Arshaw 完整日历的指令)
- 指定父文档按钮点击事件来自Angular JS中的子文档控制器
- Angular事件在Firefox中不起作用
- 服务不在Angular事件处理程序的作用域内
- 关闭日期拾取器的Angular事件检测
- 发出的Angular事件更改数据
- Angular:事件侦听器在指令更改之间递增增加