(我不能让任何头衔,因为越短,我真的想马上做的一切。)观察和评价一个指令在属性表达
我想要做的是这样的:
<mySlider max="25 * scopefunction(scopevar)"
step="scopevar=='foo'? 0.5 : 0.25"/>
<myOtherDirective factor="0.4/scopefunction(scopevar)"/>
只要这些表达式的结果发生变化,指令就需要更新内容。有一个单选按钮在两个值之间切换scopevar
,当发生这种情况时,mySlider
和myOtherDirective
都应该改变它们的工作方式;滑块获得不同的最大值和不同的步长,另一个指令得到一些用于某些计算的不同因子。
目前,我依靠
scope.$watch(attrs.max, function(newVal) {
console.log(newVal);
}
其工作正常step
和factor
,但max
,newVal
神秘变得NaN
。并且scopefunction()
确实总是返回一个数字。那么怎么可能是NaN
? max
案件与其他案件有什么不同?
我的指令都有隔离范围。 scopefunction()
是父范围的函数,所以它不能从指令中调用。我不希望这样,因为我希望指令尽可能通用,因为它们被重用了很多。而且在大多数地方,他们并没有用这些计算,所以我想保持这些属性的使用方式尽可能简单和干净。
我一直有和没有
scope: {
max: '@',
step: '@'
}
这似乎没有多大关系,因为我已经使用直接尝试attr.max
它。
我很难过。为什么max
有所不同?这怎么可能不起作用?
此外:问题似乎是'scopefunction(scopevar)'被评估为'undefined',导致NaN,当我乘以它。我仍然不明白的是它在factor
和step
中的作用。
我制作了a plnkr,显示最大失败次数和成功步数。很抱歉,我无法复制factor
了。至少不在隔离范围内。当我删除隔离范围时,factor
工作。这意味着我需要删除隔离范围,但我不确定我想要那样做。我不希望我的指令污染父范围。
我已经添加了一个plnkr,但是我无法完全重现我以前在某个时候所拥有的东西:使用隔离范围的因素。它在没有隔离范围的情况下工作,但我想我真的想在这里隔离范围。 – mcv 2014-10-02 13:13:55
我想我可能不得不放弃隔离范围。问题是我不能使用'scope:{ngModel:'='}'来更新作用域上的值。还有另一个好办法吗? – mcv 2014-10-02 16:15:59
删除隔离范围似乎意味着我无法从我的指令中更新ngModel。我确实需要双向绑定,而且这似乎只适用于隔离范围。相反,我不知道https://gist.github.com/CMCDragonkai/6282750中的第8点可能是解决方案。 – mcv 2014-10-02 21:32:14