2013-07-11 39 views
8

Tôi có một ứng dụng angularJS, trong đó tôi có một mảng.Giá trị mảng định dạng AngularJS trong textarea

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

và một vùng văn bản

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

tôi có thể thấy textarea có chứa các giá trị x1, x2 (cách nhau bằng dấu phẩy). Tôi muốn hiển thị các giá trị trên các dòng riêng biệt. Có nghĩa là tất cả các giá trị mảng phải được phân tách bằng ký tự dòng mới chứ không phải bằng dấu phẩy. Tôi có cần phải viết bộ lọc cho điều này không?

+0

U có thể thử lọc và nếu nó không hoạt động, hãy hỏi một lần nữa :) Tại sao bạn không thử giải pháp này? –

+0

Tôi nghĩ rằng nó đang làm toString trên mảng, để trả về x1, x2. Bạn cần tạo bộ lọc cho nó. – Chandermani

Trả lời

15

Bạn có thể viết một chỉ thị sửa đổi cách thức ng-mô hình chuyển đổi các biến thành giá trị đầu vào và ngược lại. Tôi chỉ viết những dòng này ra khỏi đỉnh đầu của tôi, vì vậy tôi không có ý tưởng nếu nó hoàn toàn đúng, nhưng một cái gì đó như thế này có thể làm điều đó:

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); 
     } 
    }; 
}); 

Và bạn có thể sử dụng nó như thế này:

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

Bạn có thể xem câu trả lời này để biết thêm ví dụ về trình định dạng và phân tích cú pháp: http://stackoverflow.com/questions/11616636/how-to-do-two-way-filtering-in-angular-js –

15

Đây chính là điều ng-list làm:

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

cũng này hoạt động trên tất cả các loại nguyên liệu đầu vào như nó móc vào ngModels parsers/và định dạng.

Xem fiddle này: http://jsfiddle.net/xbYzT/1/

Vấn đề với điều này là ng-list luôn tham gia với a '' như tách, vì vậy nó không thực sự hai chiều.

+1

Vấn đề duy nhất với điều này là 'ngList' luôn tham gia một mảng hiện có với', 'làm dấu phân tách, bỏ qua dấu phân tách do người dùng chọn - ngay cả khi nó không phải là một regex. –

+0

Ted: vâng, đó là một vấn đề xấu xí - và nó không dễ dàng để sửa chữa như bạn không thể thực sự trở lại chia tách bởi regexp. Đã cập nhật nhận xét để phản ánh điều đó. –

+1

AngularJS 1.3 đang loại bỏ hỗ trợ cho các regex trong ngSplit, làm cho nó trở thành điểm tranh luận. –

11

Một cách dễ dàng hơn để làm điều này trong góc> = 1,3 mà làm việc cả hai cách:

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

Plunker

+1

Điều này thực sự cần nhiều upvotes hơn. Thật là một câu trả lời tuyệt vời. –

+0

trán rất đẹp! –

+0

@AlisomMartins, cảm ơn, trán của bạn trông khá đẹp quá. –

Các vấn đề liên quan