角度转换不在ng-include $ scope中更新Chosen插件的占位符

时间:2015-03-03 22:31:29

标签: angularjs angularjs-scope angular-ui-router angular-directive angular-translate

我有一个带有localytics(angular)Chosen插件的多个实例的ng-view。我还有一个包含插件实例的ng-include。两者都呈现在同一页面上。

我正在使用数据占位符属性来渲染通过angular-translate插件过滤的值。

最初,当调用更新语言的方法时,我遇到了所有Chosen实例渲染翻译文本的问题。 我通过在方法结束时调用$ route.reload()来解决这个问题(不理想,但可以接受)。

我试过了:

  • 将翻译和翻译过滤器的值绑定在一起
  • 在控制器中设置它们
  • 观看$ scope上的属性(从不 触发)
  • 在重新加载路线之前销毁模板

但是,ng-include中的占位符在不使用硬刷新的情况下拒绝更新。在方法结束时调用$ window.location.reload()允许所有实例显示正确的翻译,但如果没有这个,我就无法找到解决问题的方法。

我认为这是一个范围问题。也许Chosen插件(这是一个指令)创建了自己的范围,然后ng-include有自己的范围,ng-view也是如此。

在Chosen插件之外正在翻译的所有属性都按预期工作。

目前,角度转换对象如下所示:

var translationEN = { SEARCH: { 'SEARCH-BTN': 'Search' } }

所以我按照以下内容对它们进行内联绑定:

<div ng-bind="'SEARCH.SEARCH-BTN' | translate">

我也尝试过$ translate上的一些方法,例如$ translate.refresh()无济于事。

如果有任何想法,我们非常感谢任何帮助和/或评论。

提前致谢。

2 个答案:

答案 0 :(得分:2)

您可以使用chosen属性传递一些配置,而不是使用data-placeholder属性,如下所示:

<select chosen="{'placeholder_text_single': 'Select the options'}"></select>

或者您可以编写所选指令也将作为配置接受的自定义属性。但是,在使用属性时,该指令将评估表达式而不是使用文字值,该值不会像翻译目的那样按预期工作,因为&#39; {{...}}&#39;不是一个有效的表达。属性将是这样的:

<select chosen placeholder-text-single="'Select the options'"></select>

答案 1 :(得分:1)

当承诺加载选项时,我遇到了类似的问题。

只有一个空数组,翻译工作正常,但将答案放回代码会导致此行为。

chosen指令中的快速调试显示,所选角度插件从中获取所选小部件模板的element未链接(或编译...我是非常新的有角度的,它仍包含{{placeholder.string | translate}}属性的data-placeholder值,但attr.placeholder包含已转换的值。

因此,此行将错误的值设置为默认文本:https://github.com/localytics/angular-chosen/blob/master/chosen.js#L57

我使用chosen函数扩展了preLink指令,该函数使用正确的值修改了element的{​​{1}}属性:

data-placeholder