一旦变得可见,就转换textarea的值

时间:2017-05-30 13:45:20

标签: javascript angularjs angular-directive

我有一个textarea,默认情况下使用ng-show="somecondition"隐藏我在代码上更改somecondition,文本区域变为visibe。

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

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

如果我创建了一个指令,那么在textarea上就没有像load这样的事件。

任何人都有想法?

注意:由于变量绑定到textarea也绑定到其他元素,我无法过滤app启动中的<br />

1 个答案:

答案 0 :(得分:0)

假设您不想制作自定义指令,并且绑定到ngModel modelValue / viewValue挂钩,则可以按照注释中的建议在控制器中使用简单的监视。由于你没有发布你的任何JS,我会做出一些假设,但你应该得到要点。注意:我不喜欢$ scope变量(参见Dot Rule),所以我改用控制器赋值。

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保存数据并编写一个自定义过滤器,在textarea外部呈现时将NewLines转换为<br />标记,但如果您已经处理了存储数据其中包含<br />个标签,使用带有ngModel的Watch或自定义指令即可。请注意,如果您必须使用<br />标记保存此数据,那么您在保存时也希望执行相同的转换 - 最简单的方法是将somecondition变量设置回默认设置,以便Watch中的代码自动为您进行转换 - 例如:

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

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