0

我正在制作一个动态的日期列表。用户可以添加他想要的所有日期选择器,但我必须验证没有匹配的日期,它们都必须不同,这是唯一的必要条件。

我已经进行了自定义指令验证并且它被正确触发,但是当我尝试使用它的隔离范围时,我只是得到了那个错误(多个指令)。我在这里看到的其他问题/解决方案建议删除隔离范围,但我需要它将日期数组传递给指令并能够将它们与当前选择的进行比较。

这是一个重现问题的代码笔。如果您删除noMatchingDates指令的scope,错误就会消失,您可以正确查看和添加日期选择器。我的意思是scope

scope: {
  getAllDates: "&allDates"
}

我认为这与docs中的这一行有关:

请求隔离范围的多个指令。

它可能还与 md-datepicker 有关,它使用隔离范围会有更多指令。那么,我该如何解决这个错误(并且仍然能够发送日期列表)?

如果鉴于md- datepicker的性质无法解决(保持范围),我该如何进行动态验证?我认为这可以使用控制器和 来完成ng-change,但我不确定这是否是一个合适的解决方案。

4

1 回答 1

0

实际上,您的指令没有理由要求隔离范围。当您的指令类似于可重用的“可视组件”时,请使用隔离范围。您的指令是关于逻辑验证的,不应阻止另一个此类组件。

要解决您的问题,您可以删除隔离范围并以这种方式在 HTML 中使用您的指令:

<div ... no-matching-dates="overtimeList">

然后在您的链接函数中,您可以通过以下方式检索该属性的值:

var dates = scope.$parse(attr.noMatchingDates);

这将为您提供绑定的内容no-matching-dates,因此在这种情况下它将返回overtimeList

我从未使用过该ctrl.$parsers.unshift语法,但似乎您也可以使用它来检索该值。只需删除scope.$parse我刚刚给您的行并写下:

ctrl.$parsers.unshift(function(arrayOfDates) { ... })

这也应该有效。请注意,在第一种方法中$watch,如果您想每次都运行验证,则需要进行更改。

于 2016-05-15T16:42:31.917 回答