我正在寻找将Angular 1应用程序更新为Angular 2并且遇到了我的一个旧指令的问题.

这个想法很简单.当聚焦输入字段时,应添加一个类(md-input-focus),另一个类被删除(md-input-wrapper).然后,这个过程应该在“模糊”事件上反转 – 即焦点丢失.

我的旧指令只包括行

.directive('mdInput',[
    '$timeout',function ($timeout) {
        return {
            restrict: 'A',scope: {
                ngModel: '='
            },link: function (scope,elem,attrs) {
                var $elem = $(elem);
                $elem.on('focus',function() {
                      $elem.closest('.md-input-wrapper').addClass('md-input-focus')
                })
                .on('blur',function() {
                 $(this).closest('.md-input-wrapper').removeClass('md-input-focus');
                })
             }

等等…

我显然对我的指示有经典的开始但是已经没有…..技能了

import {Directive,ElementRef,Renderer,Input} from 'angular2/core';

@Directive({
      selector: '.mdInput',})

export class MaterialDesignDirective {
      constructor(el: ElementRef,renderer: Renderer) {
           // Insert inciteful code here to do the above
      }
}

任何帮助,将不胜感激.

更新:

HTML看起来像(在输入元素被聚焦之前):

<div class="md-input-wrapper">
   <input type="text" class="md-input">
</div>

然后

<div class="md-input-wrapper md-input-focus">
   <input type="text" class="md-input">
</div>

后.

input元素是唯一可以接收焦点事件的元素(因此也是指令的目标)但是父元素< div>需要添加和删除类.

进一步帮助

Please see Plunker for help/explanation – 如果有人可以帮忙的话会很棒

解决方法

更新
@Directive({selector: '.md-input',host: {
  '(focus)': 'setInputFocus(true)','(blur)': 'setInputFocus(false)',}})
class MaterialDesignDirective {
  MaterialDesignDirective(private _elementRef: ElementRef,private _renderer: Renderer) {}
  setInputFocus(isSet: boolean): void {
    this.renderer.setElementClass(this.elementRef.nativeElement.parentElement,'md-input-focus',isSet);
  }
}

原版的

通过定义主机绑定,可以在没有ElementRef和Renderer(您应该在Angular2中努力)的情况下轻松完成:

import {Directive,host: {
        '(focus)':'_onFocus()','(blur)':'_onBlur()','[class.md-input-focus]':'inputFocusClass'
      }

})

export class MaterialDesignDirective {
      inputFocusClass: bool = false;

      _onFocus() {
        this.inputFocusClass = true;
      }

      _onBlur() {
        this.inputFocusClass = false;
      }
}

或者更简洁一点

@Directive({
      selector: '.mdInput',host: {
        '(focus)':'_setInputFocus(true)','(blur)':'_setInputFocus(false)','[class.md-input-focus]':'inputFocusClass'
      }

})

export class MaterialDesignDirective {
      inputFocusClass: bool = false;

      _setInputFocus(isFocus:bool) {
        this.inputFocusClass = isFocus;
      }
}

我只在Dart尝试过它可以正常工作.我希望我把它正确地翻译成TS.

不要忘记将类添加到指令中:使用指令的元素.

javascript – 在焦点事件上添加类的Angular2的更多相关文章

  1. HTML5 input新增type属性color颜色拾取器的实例代码

    type 属性规定 input 元素的类型。本文较详细的给大家介绍了HTML5 input新增type属性color颜色拾取器的实例代码,感兴趣的朋友跟随脚本之家小编一起看看吧

  2. 移动HTML5前端框架—MUI的使用

    这篇文章主要介绍了移动HTML5前端框架—MUI的使用的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. 使用placeholder属性设置input文本框的提示信息

    这篇文章主要介绍了使用placeholder属性设置input文本框的提示信息,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  4. Bootstrap File Input文件上传组件

    这篇文章主要介绍了Bootstrap File Input文件上传组件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. HTML5中input输入框默认提示文字向左向右移动的示例代码

    这篇文章主要介绍了HTML5中input输入框默认提示文字向左向右移动,本文通过实例代码给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. swift 正则表达式运用实例选自《swifter 100个swift开发必备tip 》

  7. Swift 2.0关键字guard

    viewmode=list前言:当一项新的技术出来的时候,第一参考自然是文档。文档链接guard语句guard语句的作用是:当某些条件不满足的情况下,跳出作用域举个例子:写个函数,保证输入小于10在playground输入如下可以看到输出上述方法和使用if一样但是使用guard有一个好处如果不使用return,break,continue,throw跳出当前作用域,编译器会报错所以,对那些对条件要求十分严格的地方,guard是不二之选。另外,guard也可以使用可选绑定也就是guardlet的格式例如如何

  8. Swift 柯里化(currying)和反柯里化(uncurrying)

    //DemoofcurryingfuncaddTwoNums(a:Int)(num:Int)->Int{returna+num}letaddToFour=addTwoNums(4)letresult=addToFour(num:6)print("result:\(result)")funcgreaterThan(comparor:Int)(input:Int)->Bool{returninput>

  9. swift – 上下文类型“AnyObject”不能与字典文字一起使用?

    我正在尝试将Objective-C示例转换为Swift2,但我遇到一个小问题。原来的Objective-C片段:我认为Swift代码应该是:结果错误是:在这种情况下,如何将Objective-C转换成Swift?因此,声明数组更具体在Swift3中用于JSON集合类型或字典/数组仅包含值类型使用

  10. swift – 我可以指定generic是值类型吗?

    我知道我们可以通过使用AnyObject来基本上指定我们的泛型是任何引用类型:但是有没有办法指定我们的泛型应该只是值类型,不允许引用类型?

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部