【问题标题】:AngularJS format array values in textareaAngularJS在textarea中格式化数组值
【发布时间】:2013-07-09 07:10:19
【问题描述】:

我有一个 angularJS 应用程序,其中有一个数组。

  $scope.data[0] =  x1;
  $scope.data[1] =  x2;

和一个文本区域

  <textarea ng-model="data"> </textarea>

我可以看到 textarea 包含值 x1、x2(用逗号分隔)。我想在单独的行上显示值。这意味着所有数组值都应该用换行符而不是逗号分隔。我需要为此编写过滤器吗?

【问题讨论】:

  • 您可以尝试过滤,如果它不起作用,请再次询问:)您为什么不尝试此解决方案?
  • 我认为它正在对数组执行 toString,以返回 x1,x2。您需要为其创建一个过滤器。

标签: angularjs


【解决方案1】:

这正是ng-list 所做的:

<textarea ng-model="someArray" ng-list="/\n/"></textarea>

这也适用于所有其他类型的输入,因为它与 ngModels 解析器/格式化程序挂钩。

看到这个小提琴:http://jsfiddle.net/xbYzT/1/

这样做的问题是 ng-list 总是以 ',' 作为分隔符加入,所以它并不是真正的双向。

【讨论】:

  • 唯一的问题是ngList 总是以, 作为分隔符加入现有数组,忽略用户选择的分隔符——即使它不是正则表达式。
  • Ted:是的,这是一个丑陋的问题——而且它不容易解决,因为你不能真正恢复正则表达式的拆分。更新了评论以反映这一点。
  • AngularJS 1.3 正在取消对 ngSplit 中正则表达式的支持,使其成为一个有争议的问题。
【解决方案2】:

Angular >= 1.3 中实现这一点的更简单的方法是双向的:

<textarea ng-model="yourStringArray" ng-list="&#10;" ng-trim="false"></textarea>

Plunker

【讨论】:

  • 这确实需要更多的支持。多么棒的答案。
  • 非常漂亮的眉毛!
  • @AlisomMartins,谢谢,你的眉毛也很好看。
【解决方案3】:

您可以编写一个指令来修改 ng-model 如何将变量转换为输入值并返回。我只是在脑海中写下这个,所以我不知道它是否完全正确,但这样的事情可能会做到:

app.directive('splitArray', function() {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function(scope, element, attr, ngModel) {

            function fromUser(text) {
                return text.split("\n");
            }

            function toUser(array) {                        
                return array.join("\n");
            }

            ngModel.$parsers.push(fromUser);
            ngModel.$formatters.push(toUser);
        }
    };
});

你可以这样使用它:

  <textarea ng-model="data" split-array> </textarea>

【讨论】:

猜你喜欢
  • 2017-03-16
  • 2020-10-12
  • 2013-11-22
  • 2012-01-28
  • 2012-10-01
  • 2012-01-06
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
相关资源
最近更新 更多