如果我有一个没有模板的AngularJS指令,并且希望它在当前作用域上设置一个属性,那么最好的方法是什么?
例如,计算按钮点击次数的指令:
<button twoway="counter">Click Me</button> <p>Click Count: {{ counter }}</p>
使用伪指令将点击计数分配给双向属性中的表达式:
.directive('twoway', [ '$parse', function($parse) { return { scope: false, link: function(scope, elem, attrs) { elem.on('click', function() { var current = scope.$eval(attrs.twoway) || 0; $parse(attrs.twoway).assign(scope, ++current); scope.$apply(); }); } }; } ])
有一个更好的方法吗?从我所读的内容来看,孤立的作用域会过大,但是我需要一个子作用域吗?除了使用以外,还有没有更干净的方法可以写回指令属性中定义的范围变量$parse。我只是觉得我很难过。
$parse
这里有完整的柱塞。
为什么孤立范围过大?对于这种事情,它非常有用:
scope: { "twoway": "=" // two way binding },
对于这个问题,这是一个非常惯用的角度解决方案,所以这是我要坚持的。