2016-07-22 23 views
0

我试图使用角度翻译来翻译从形式上形成的窗体上的选择输入数据,但我无法使其正常工作。以选择形式使用角度翻译

基本上,使用角转换为其他类型的输入的时候,我会做一些像

'templateOptions.label': '"NAME" | translate', 
'templateOptions.placeholder': '"NAME" | translate' 

下面这个模式,我试图把我的数据是这样的:

"templateOptions.options": [ 
    { 
     "name": "{{ 'OPT1' | translate }}", 
     "id": 1 
    }, 
    { 
     "name": "{{ 'OPT2' | translate }}", 
     "id": 2 
    } 
] 

但是,这下拉菜单没有给我什么。有人可以在这里给我任何指示吗?

的完整源代码的链接中找到http://output.jsbin.com/horawaqaki/

感谢您的帮助!

回答

1

在这种情况下,您可以在控制器内部使用$translate服务。此服务可以返回您翻译的值,但它是异步操作。因此,您应该在控制器中添加一些标志,以便仅在收到此翻译时才显示表单(在本例中,我将使用vm.areFieldGenerated,然后用ng-if显示/隐藏表单和元素)。

所以,基本上你应该通过本地化的按键阵列和$translate服务将返回下列对象:

{ 
    'NAME': 'Name', 
    'OPT1': 'Working!', 
    'OPT2': 'Working indeed!' 
} 

之后,你就可以使用这个值来定位你的领域标题或选项。

你生成领域和分配转换值的选项看起来像这样的功能:

// variable assignment 
vm.env = getEnv(); 
vm.model = {}; 
vm.options = {formState: {}}; 
vm.areFieldsGenerated = false; 

generateFields(); 

// function definition 
function generateFields() { 
    $translate(['NAME', 'OPT1', 'OPT2']).then(function(translationData) { 
    vm.fields = [ 
     { 
     key: 'item', 
     type: 'select', 
     templateOptions: { 
      valueProp: 'id', 
      labelProp: 'name', 
      options: [ 
      {name:'Not working!', id: 1}, 
      {name:'Not working indeed!', id: 2} 
      ] 
     }, 
     expressionProperties: { 
      'templateOptions.label': transationData['NAME'], 
      'templateOptions.options': [ 
      { 
       name: translationData['OPT1'], 
       id:1 
      }, 
      { 
       name: translationData['OPT2'], 
       id:2 
      } 
      ] 
     } 
     } 
    ]; 
    vm.originalFields = angular.copy(vm.fields); 
    vm.areFieldsGenerated = true; 
    }); 
} 

我创建工作示例here

$translate的更多示例在angular-translate.github.io上。

+0

不错的一个!谢谢 – kiosia