0

我有一个类似于这样的角度指令:

.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

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

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

2 回答 2

1

ngModel控制器通常与输入类型指令一起使用,其中 2 路数据绑定显示其全部功能。但是从您的示例来看,您的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>

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

于 2013-01-28T08:42:31.010 回答
1

Given$scope.mymodel已经定义为数组,那么下面应该可以工作。

app.directive("forexample", function() {
  return function( scope, elm, attrs ) {
    elm.bind("click", function( evt ) {
      scope.$apply(function( scope ) {
        scope[ attrs.ngModel ].push('value');
      });
    });
  };
});
于 2013-01-28T06:12:00.827 回答