2013-09-23 23 views
7

Có thể sử dụng typeof trong angularjs?AngularJs sử dụng instanceof trong biểu thức

Tôi có lỗi lặp lại rằng dữ liệu của mình và nên kiểm tra xem dữ liệu có phải là chuỗi hoặc đối tượng hay không.

<tr ng-repeat="text in data"> 
    <td>{{angular.isObject(text) && 'IsObject'||text}}</td> 
</tr> 

Trả lời

4

Âm thanh như một nơi tốt để sử dụng một bộ lọc:

<tr ng-repeat="text in data"> 
    <td>{{text|displayText}}</td> 
</tr> 
angular.module('myApp').filter('displayText', function() { 
    return function(text) { 
     return angular.isObject(text) ? 'IsObject' : text; 
    }; 
}); 
+1

Thực ra, đây là một nơi khá tệ để sử dụng bộ lọc. Đây không phải là những gì bộ lọc được dự định và có thể dẫn đến một số mã nghèo nghiêm trọng nếu bạn tiếp tục sử dụng bộ lọc ở nơi khác theo cách tương tự. Một cách tốt hơn là sử dụng một hàm. –

+0

@TomBull tại sao lại xấu khi sử dụng bộ lọc trong trường hợp này? – Zorgatone

+0

Xem nhận xét về câu trả lời của tôi ... –

7

Hãy không sử dụng một bộ lọc trong trường hợp này, nó rõ ràng là một nơi dành cho một hàm trong điều khiển của bạn :

<tr ng-repeat="text in data"> 
    <td>{{isThisAnObject(text)}}</td> 
</tr> 

Và trong bộ điều khiển của bạn:

$scope.isThisAnObject = function(input) { 
    return angular.isObject(input) ? 'IsObject' : input; 
}; 

Nó không chỉ ít mã hơn, nhưng nó cũng hoạt động tốt hơn ở nhiều nơi khác. Bộ lọc cho một mục đích rất cụ thể. Không phải cái này!

+5

Bạn có thể giải thích tại sao, trong trường hợp này, chức năng có tốt hơn bộ lọc không? "Mục đích rất cụ thể" này là gì cho các bộ lọc khiến chúng trở thành một lựa chọn không tốt cho điều này? –

+0

vâng xin vui lòng tôi muốn có một lời giải thích tốt hơn cho @TomBull – Zorgatone

+0

Một bộ lọc, như tên cho thấy, được thiết kế để lọc. Cụ thể, lọc mảng - tức là hạn chế các mục được hiển thị trong, ví dụ: bộ lặp. Đó là một tác dụng phụ (có lẽ là ngoài ý muốn) mà cú pháp cũng hoạt động trên các mục riêng lẻ như trong câu trả lời được chấp nhận. Mặc dù cú pháp được hiển thị hoạt động tốt trong trường hợp đơn giản nhất - nó nhanh chóng bị lộn xộn. Ví dụ, điều gì sẽ xảy ra khi bạn muốn soạn nhiều hơn một trong các hoạt động này? Hoặc xử lý các kết quả của hoạt động theo một cách khác? Hoặc sử dụng các hoạt động trong một số bối cảnh khác? –