一尘不染

AngularJS自定义指令双向绑定

angularjs

如果我有一个没有模板的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。我只是觉得我很难过。

这里有完整的柱塞。


阅读 298

收藏
2020-07-04

共1个答案

一尘不染

为什么孤立范围过大?对于这种事情,它非常有用:

  scope: {
     "twoway": "=" // two way binding
  },

对于这个问题,这是一个非常惯用的角度解决方案,所以这是我要坚持的。

2020-07-04