对于我正在处理的项目,我创建了UI Bootstrap日历小部件的简化版本。为Angular指令创建的元素创建名称
Plunker of my Simplified Calendar, and how I'm using it, is here.
的UI引导日历的一个有趣的方面是,尽管它去到input[text]
,它仍然会产生在$error
字典中的date
验证的表单控制器,就好像我已经指定了我的DOM中有input[date]
元素。
然而,有很多子捕获的渔获。在我的plunker的DOM中马上会注意到的一件事情是,当给定的日期字段不是实际的日期时,我已经指定了错误跨度(尝试输入一些荒谬的东西,比如'cat'作为值!)如果你输入了一些东西不是日期,那些应该出现,但他们没有。
我试过几件事情要暴露标记创建于母公司的名称字段:
$transclude
设置为false,使得<calendar></calendar>
标签获得与calendar
指令的内容替换模板,并指定name
属性。这个“有效”,除了所述输入被包装在具有使用Bootstrap样式框架来看起来正确的类的跨度中。直接创建在
calendar
指令的输入域的name
属性与绑定,像这样*:app.directive('mustPrecedeDate', [ function() { return { restrict: 'E', template: '<input type="text" name="{{ someName }}" />', scope: {}, controller: 'calendarCtrl', link: function() {} }; } };
写
link
代码明确查找输入那就是calendar
生成的标记的孩子,并为其分配一个name
属性。双方2和3次失败,因为很明显这不是真正的东西,可以做
这导致了我的问题(我找不到SO疑问的是,发现的来源。):在我可以通过什么方式获取输入元素的名称,以便将验证结果报告给$error
字典,以便我可以为用户提供有用的验证消息?
*:显然,'左边四个空格'的代码块在编号列表中表现不好,所以我不得不使用反引号代码表示法来正确地中间格式化文本。如果我没有发现SO使用的降价设置中的错误,请随时纠正我的格式。