2015-12-21 15 views
6

Vì vậy, giả sử chúng tôi có một đối tượng đơn giản chứa chuỗi cho hai ngôn ngữ khác nhau như
welcomeText = {"de": "Willkommen zurück!", "en": "Welcome back!"}.angular2 elvis toán tử và ký hiệu khung/đối tượng truy cập bằng phím

welcomeText là tài sản của Texts đối tượng chứa tất cả văn bản và được phân phối không đồng bộ (vì vậy tôi cần phải chăm sóc các giá trị không xác định có thể, do đó toán tử elvis). Bây giờ, trong mẫu angular2 của tôi, tôi muốn hiển thị văn bản dựa trên ngôn ngữ được chọn hiện tại.
này đang làm việc (nhưng không phải những gì tôi cần):

.. 
{{Texts?.welcomeText?.de}} // works, as well as {{Texts?.welcomeText?.en}} 
.. 

gì tôi muốn là thế này (kể từ ngôn ngữ có thể được thay đổi):

.. 
{{Texts.?welcomeText?[language]}} 
.. 

Đáng tiếc là điều này dẫn đến một lỗi:

EXCEPTION: Template parse errors: 
Parser Error: Conditional expression 
     {{Texts?.welcomeText?[language]}} 
    requires all 3 expressions at the end of the expression .. 

Không biết cách khắc phục lỗi này. Tôi chỉ không chắc chắn nếu tôi đang sử dụng nó sai hoặc nếu nó chỉ đơn giản là không có ý định làm việc như thế. Đối với thời điểm này tôi sử dụng một cách giải quyết đơn giản, nhưng tôi thấy nó có hơi xấu xí kể từ khi tôi có một lời gọi phương thức ở khắp mọi nơi tôi muốn hiển thị văn bản:

.. 
{{getText('welcomeText')}} 
.. 
.. 
getText(name : string){ 
if(this.Texts) 
    return this.Texts[name][this.language] 
.. 

Đây có phải là chỉ con đường để đi hoặc là có một cách để làm theo cách tôi muốn, với toán tử elvis?
Cảm ơn rất nhiều câu trả lời!

Trả lời

0

Tôi có cảm giác những gì bạn đang cố gắng làm ở đây thực sự không thể có gì chắc chắn về nó trên trang template syntax.

Với giá trị của nó, tôi không nghĩ có bất kỳ điều gì thực sự sai với giải pháp mà bạn đã đưa ra, có lẽ cách tôi tự giải quyết vấn đề này.

Edit: Nó cũng đáng chú ý là các i18n và l10n tính năng của góc 2 đã chưa thực hiện được, tôi muốn tiếp tục theo dõi cho tính năng này để giải quyết vấn đề

0

tôi gặp phải cùng một vấn đề, và trong khi Elvis? nhà điều hành đã được giới thiệu trong chủ đề này: https://github.com/angular/angular/issues/791 hiện đã bị đóng, @lgalfaso đề nghị mở rộng nó để bao gồm? [và? (

Trong cuốn sách của tôi, nó phải hỗ trợ điều này, chủ yếu là vì cách giải quyết là một điều tẻ nhạt phải làm.

2

tôi thực sự đã kết thúc sử dụng tùy chỉnh 'an toàn chuyển hướng' ống, như trong chuỗi trường hợp của tôi null-séc và dấu ngoặc vuông đã nhận được cách để dài và điều hành ?. góc của sẽ không phù hợp với [] hạn chế.

import { Pipe } from '@angular/core'; 
import { path } from 'ramda'; 

@Pipe({name: 'safe'}) 
export class SafeNavigationPipe { 
    transform(propertyPath: any[], source: any) { 
     return path(propertyPath, source); 
    } 
} 

Nơi path function thực hiện tất cả công việc - truy xuất Dữ liệu es tại đường dẫn đã cho và trả về undefined ngay sau khi đường dẫn không thể được giải quyết.

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

{{ [userId, dayIdx, shiftIdx, 'status'] | safe:usersList }} 

đâu mục mảng có thể được giá trị động.

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