【问题标题】:transform value of a textarea as soon as it becomes visible文本区域的值在可见时立即转换
【发布时间】:2017-05-30 13:45:19
【问题描述】:

我有一个默认隐藏的文本区域,使用 ng-show="somecondition" 我在我的代码上更改 somecondition,文本区域变为可见。

绑定到 textarea 的文本中包含 <br /> 标记。 我想在 textarea 可见后立即删除 <br />

我不知道在哪里绑定删除 br 的函数。

如果我创建指令,则 textarea 上没有像 load 这样的事件。

有人有想法吗?

注意:由于绑定到 textarea 的变量也绑定到其他元素,因此我无法在应用启动时过滤 <br />

【问题讨论】:

  • 只需在<br>上使用ng-hide="somecondition"

  • 不是元素,而是 textarea 中的普通文本 我想隐藏它们只要
  • 我现在明白了 - 您可能需要注意条件,然后手动删除它(例如,ng-model 在您的文本中使用 watch 然后使用例如全局 .replace('<br />', '') 更改值- 见stackoverflow.com/questions/21056037/…
  • 没错,我正在寻找这样的东西

标签: javascript angularjs angular-directive


【解决方案1】:

假设您不想只制作自定义指令并绑定到 ngModel modelValue/viewValue 挂钩,您可以按照 cmets 中的建议在控制器中使用简单的手表。由于您没有发布任何 JS,因此我将做出一些假设,但您应该了解要点。注意:我不喜欢 $scope 变量(请参阅点规则),所以我改用控制器分配。

app.controller("someController", function($scope)
{
    var self = this;

    this.somecondition = false;
    this.bound_data = "testing<br />123";

    $scope.$watch(function() { return self.somecondition; }, function(newVal, oldVal)
    {
      if (newVal)
      {
         self.bound_data = self.bound_data.replace("<br />", "\n");
      }
      else
      {
         self.bound_data = self.bound_data.replace("\n", "<br />");
      }
    }
});

我个人的偏好是使用 NewLines 保存数据并编写一个自定义过滤器,在文本区域之外渲染时将 NewLines 转换为 &lt;br /&gt; 标签,但如果您已经在处理具有 &lt;br /&gt; 标签的存储数据在其中,使用带有 ngModel 的 Watch 或自定义指令是可行的方法。请注意,如果您随后必须使用 &lt;br /&gt; 标记保存此数据,您将希望在保存时进行相同的转换 - 可能最简单的方法是将 somecondition 变量设置回默认值,以便代码中的Watch 会自动为您进行转换 - 例如:

self.save = function()
{
    // fires the watch transform
    self.somecondition = false;

   // now save your data with the <br /> tags in-tact
}

【讨论】:

    猜你喜欢
    • 2010-10-22
    • 2015-11-15
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    相关资源
    最近更新 更多