如何将元素推送到指令中的数组 - AngularJS

时间:2013-01-28 04:21:11

标签: javascript angularjs

我有一个角度指令,类似于:

.directive('forexample', function() {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function(scope, elm, attrs, ctrl) {
        elm.on('click', function() {
            scope.$apply(function () {
            ctrl.$setViewValue('value');

来自:

<button forexample ng-model="mymodel">Do It</button>

很明显

$scope.mymodel; // equals value

我想要的是推('价值');从指令到模型,所以最后点击“Do It”几次后,你会得到:

$scope.mymodel; // equals array('value,'value','value');

2 个答案:

答案 0 :(得分:1)

鉴于$scope.mymodel已定义为Array,则以下内容应该有效。

app.directive("forexample", function() {
  return function( scope, elm, attrs ) {
    elm.bind("click", function( evt ) {
      scope.$apply(function( scope ) {
        scope[ attrs.ngModel ].push('value');
      });
    });
  };
});

答案 1 :(得分:1)

ngModel控制器通常与输入类型指令一起使用,其中双向数据绑定显示其全部功率。但从你的例子来看,在你的情况下可能不需要ngModel的完整机制。从功能上讲,您的示例并未解释您要执行的操作,因此我只是假设您希望将值推送到数组以响应单击事件。如果是这样,最简单的方法是在范围上使用$eval方法:

.directive('forexample', function() {
    return {
      link: function(scope, elm, attrs, ctrl) {
        var modelArray = scope.$eval(attrs.forexample);

        elm.bind('click', function() {            
            scope.$apply(function () {
              modelArray.push('value');
            });
        });
      }
    };
  });

上述指令可以在如下模板中使用:

<button forexample="somearray">Do It</button>

这是工作插件:http://plnkr.co/edit/xc5mui9xbxIWHxcvAjqR?p=preview