更改 AngularJS ngTrim 行为

Posted

技术标签:

【中文标题】更改 AngularJS ngTrim 行为【英文标题】:Change AngularJS ngTrim Behavior 【发布时间】:2017-12-31 17:52:00 【问题描述】:

我正在使用 AngularJS 版本 1.5.6。我有一个包含大量文本区域和文本输入的大型应用程序。我今天发现了一个由 AngularJS 为文本类型输入修剪输入的默认行为引起的错误。我想将此行为从默认修剪更改为默认不修剪。

有没有一种简单的方法可以做到这一点,而不是通过我的应用程序中的数百个文本区域和文本输入。 (也许是全局的或编写我自己的指令?)

这里是描述 ng-trim (ngTrim) 的默认行为的文档页面。

https://docs.angularjs.org/api/ng/input/input%5Btext%5D

【问题讨论】:

按照文档集ng-trim="false" 这可能是使用 JQuery 获取对所有文本框的引用然后将 ng-trim 设置为 false 的一个很好的用例。我通常不提倡将 Jquery 代码与 Angular 应用程序混合使用,但这似乎是一件非常简单的事情。 @charlietfl 是的,我明白了,但我不想为数百个不同的元素这样做。 @MikeFeltman 我认为这可能是我的最佳选择,因为我的项目具有 JQuery 依赖项。谢谢。 【参考方案1】:

以下指令应适用于所有输入类型=文本字段。默认情况下,它将为每个输入字段设置 ngTrim false 的值。如果需要,可以为 textarea 创建一个类似的。

.directive('input', function($compile)
   return 
   link(scope, element, attrs) 
    if (element.attr('type') === 'text') 
      attrs.$set('ngTrim', 'false');
    
  
  ;
 );

【讨论】:

@SKPall 你会在哪里指定它? 可以在添加控制器的同一个模块中添加,也可以在新模块中添加。 对不起。我知道如何将它绑定到一个模块中。具体来说,您将在哪里调用输入指令,或者您是否暗示一旦加载,它将是全局的并自动影响所有输入? 由于指令名称本身就是“输入”,它适用于每个“输入”元素。所以对于所有:,这将被自动调用。 谢谢。这太妙了。我不知道你能做到。

以上是关于更改 AngularJS ngTrim 行为的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 组件在 UiRouter 路由更改时监视和显示通知

AngularJS 依赖注入

AngularJS - 从控制器更改类的属性

angularjs怎样更改子作用域的值

一篇入门AngularJS

方向变化的无线电组行为