从右到左括号方向问题,angularjs

时间:2013-12-21 22:09:11

标签: angularjs

我尝试用大括号解决语言问题。

我有一张桌子,我填充td就像:

<td>{{item.biz_name + ' \(' + item.id + '\)'}}</td>

其中biz_name可能是希伯来语或英语。

默认情况下,我为所有表格行设置了样式direction: rtl;。如果我改为ltr,我会得到结果反之亦然。

我找到了一些信息HERE,但它对我没什么帮助。

解决方法是更改​​包含英文字符的特定ng-style的样式(td)。

所以它应该是一些if声明:如果Eng =&gt;另外设置样式ltr rtl

如何通过角度实现这一目标?

谢谢,

这是 Fiddle (见第19行)

enter image description here

[编辑]

在IE9-10中运行良好,但在Chrome中运行不正确

3 个答案:

答案 0 :(得分:2)

这与Angular无关。

这与parens(和括号)没有固有的“方向”这一事实有关。因此,当浏览器渲染文本RTL时,它不知道它在另一侧运行的第一个paren的方向,因为它没有被方向字符(单词字符)包围,所以它将它跳转到另一侧并且“反映”它(翻转它)。

所以,你需要让浏览器知道你的方向......你可以这样做两种方式:

  1. 在HTML中使用LRM字符:

    <div style="direction:rtl">Some Value (test)&#x200E;</div>
    
  2. 使用CSS样式:

    <style>
    .left-to-right-marked:after {
       content: "\200E";
    }
    </style>
    <div style="direction:rtl">
       <span class="left-to-right-marked">Some Value (test)</span>
    </div>
    
  3. 任何一方都可以。

    Here is an updated Fiddle, that's working with the ‎ fix


    编辑:在Angular上,我建议ng-bind="myValue"使用{{myValue}}而不是{{1}},除非是为了防止可能发生的“加载闪烁”用户正在等待模块引导。

答案 1 :(得分:1)

我不知道这个css direction属性是如何运作的,我也不知道希伯来语,但我认为这应该有所帮助。
我在相关的td元素中添加了ng-class。

<td ng-class="{hebrew: !english(item.biz_name)}">{{item.biz_name + ' \(' + item.id + '\)'}}</td>

我在范围中添加了以下功能:

$scope.english = function(string) {
    return string.match(/[a-zA-Z]+/);
};

这适用于包含非拉丁字符的所有item.biz_name值的希伯来语类。

答案 2 :(得分:1)

首先,使用过滤器

从文本中获取方向
fessmodule.filter('direction', function () {
  return function (text) {
    return text.match(/^[a-z]/i) ? 'ltr' : 'inherit'; 
  }
});

其次,将该过滤器用于ng-style

<td ng-style="{direction:(item.biz_name|direction)}" ...

演示:http://jsfiddle.net/SAWsA/945/