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

Javascript 如何在指令-AngularJS中将元素推送到数组中,javascript,angularjs,Javascript,Angularjs,我在angular中有一个指令类似于: .directive('forexample', function() { return { restrict: 'A', require: 'ngModel', link: function(scope, elm, attrs, ctrl) { elm.on('click', function() { scope.$apply(function () {

我在angular中有一个指令类似于:

.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>
我想要的是推动(“价值”);从指令中删除模型,因此在最后单击“Do It”几次后,您将得到:

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

给定
$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');
      });
    });
  };
});

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>
去做吧

这里是工作提示:

我实际上正在访问phonegap摄像头,但我不想包含所有额外的代码。基本上,摄像头返回fileURI,然后使用phonegap上传,所有内容都在同一个指令中。我的计划是在相机返回fileURI(以便用户看到它正在上载)后,在指令中设置一个状态,我将上载它,然后将状态设置为finished,并将结果(文件id和url)推送到模型中,最后将其再次保存为更大内容类型的一部分。如果作用域[attrs.ngModel];可以使用在指令中使用ctrl.$setViewValue有什么好处?老实说,我从来没有使用过
ctrl.$setViewValue
,我也不确定。(但我想,如果孤立的作用域出现问题,可以使用它。)
<button forexample="somearray">Do It</button>