美文网首页
IONIC3 Emoji 选择器

IONIC3 Emoji 选择器

作者: 与时间赛跑_ | 来源:发表于2018-09-24 19:50 被阅读0次

    (好久没更~~~

           因为APP需要聊天的功能,那么emoji表情输入就必不可少了。说起来有点奇怪,差点喷一口老血,晚上写好了,死命都跑不通,明一早起来就跑通了,该不会是某些代码保存失败了吧。大概吧。。。

        使用angular和ionic 构建这个表情输入异常简单,这里就简单给大家说明一下(我估计网上也没有)。

           首先使用angular的cli命令生成我们自己的自定义组件,这应该算是angular的核心内容了。这样我们就可以直接用自己创建的标签生成一个emoji表情控件,而不用频繁的操作DOM(次要的代码可能会省略,代码整理好后会传上来链接)。

          开始的时候先来看看效果吧。

     emoji本身你可以理解为string类型的字符串,这样理解应该也不会造成太大的不适应。

    1.  首先我们通过cli命令创建了名为 emojipick  的component的,好的我们需要把他加入到app.model中,这样我们就可以在全局中任意地方使用这个我们自定义的标签了。

    2.有了component,我们还需要给我们提供emoji表情的provider,那么我们再次使用angular的cli 命令生成一个自定的provider,并用它来给我们的component提供表情。这里把server命名为emoji。

    emoji.js如下:

    @Injectable()

    export class EmojiProvider {//注意export

    constructor() {

    console.log('Hello EmojiProvider Provider');

    }

    getEmoji(){//在外部获取emoji。

    const EMOJIS ="😀 😃 😄 😁 😆 😅 😂 🤣 😊 😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 😜 😝 😛 🤑 🤗 🤓 😎 🤡 🤠 😏 😒 😞 😔 😟 😕 🙁" +

    " ☹️ 😣 😖 😫 😩 😤 😠 😡 😶 😐 😑 😯 😦 😧 😮 😲 😵 😳 😱 😨 😰 😢 😥 🤤 😭 😓 😪 😴 🙄 🤔 🤥 😬 🤐 🤢 🤧 😷 🤒 🤕 😈 👿" +

    " 👹 👺 💩 👻 💀 ☠️ 👽 👾 🤖 🎃 😺 😸 😹 😻 😼 😽 🙀 😿 😾 👐 🙌 👏 🙏 🤝 👍 👎 👊 ✊ 🤛 🤜 🤞 ✌️ 🤘 👌 👈 👉 👆 👇 ☝️ ✋ 🤚" +

    " 🖐 🖖 👋 🤙 💪 🖕 ✍️ 🤳 💅 🖖 💄 💋 👄 👅 👂 👃 👣 👁 👀 🗣 👤 👥 👶 👦 👧 👨 👩 👱‍♀️ 👱 👴 👵 👲 👳‍♀️ 👳 👮‍♀️ 👮 👷‍♀️ 👷";

    let array=EMOJIS.split(" ");//以空格来区分每一个emoji

    let grounNumber=Math.ceil(array.length/24);

    let item=[];

    for(let i=0;i

    item.push(array.slice(24*i,24*(i+1)));//分组

    }

    return item;

    }

    }

    好的提供给component的provider 我们已经写好了,现在开始处理component吧:

    先来看一下component的目录结构:

    import {Component,forwardRef}from '@angular/core';//引入必要的文件

    import {ControlValueAccessor,NG_VALUE_ACCESSOR}from "@angular/forms";

    import { EmojiProvider }from '../../providers/emoji/emoji';

    /**

    * Generated class for the EmojiPickComponent component.

    *

    * See https://angular.io/api/core/Component for more info on Angular

    * Components.

    */

    export const EMOJI_ACCESSOR:any = {

    provide:NG_VALUE_ACCESSOR,

    useExisting:forwardRef(()=>EmojiPickComponent),

    multi:true

    }

    @Component({

    selector:'emoji-pick',//标签

    templateUrl:'emoji-pick.html',

    providers:[EMOJI_ACCESSOR]

    })

    export class EmojiPickComponentimplements ControlValueAccessor{

    emojiArray=[];

    content:string;

    text:string;

    onChanged:Function;

    onTouched:Function;

    /*这里我们实现了ControlValueAccessor, ControlValueAccessor到底是什么东西呢?:

    ControlValueAccessor充当Angular Forms API和DOM中的本地元素之间的桥梁。

    如果我们需要操作表单控制指令我们需要实现他的几个方法:(分别是下面的1,2,3)

    constructor(public emoji:EmojiProvider) {

    this.emojiArray=this.emoji.getEmoji();

    }

    writeValue(obj:any):void {//1

    //为该元素写入一个新的值

    this.content=obj;

    }

    registerOnChange(fn:any):void {//2

    //当ui中的控件组发生值得改变是就会调用

    this.onChanged=fn;

    //console.log("this is ok?");

    this.setValue(this.content);

    }

    registerOnTouched(fn:any):void {//3

    //控件收到事件时调用

    this.onTouched=fn;

    }

    setValue(val:any){

    this.content+=val;

    if(this.content){

    this.onChanged(this.content);//表情不一定只输入一个

    }

    }

    }

    下面是html :

    <div class="emoji-picker">

    <div class="emoji-items">

    <ion-slides pager>//滑块

    <ion-slide *ngFor="let items of emojiArray">//遍历emoji

    <span class="emoji-item" (click)="setValue(item)" *ngFor="let item of items">

    {{item}}//每一个单独的表情

    </span>

    </ion-slide>

    </ion-slides>

    </div>

    </div>

    到这里,事情已经完成了大半部分。接着,在你要使用的地方调用这个表情就可以了,接下来就是使用ng控制样式和显示与否了:

    LIke this:

    <ion-footer no-border [style.height]="emojiPickflag? '255px':'55px' ">

    <ion-grid>

    <ion-row>

    <ion-col col-2>

    <button ion-button icon-only clear item-right (click)="swithEmojiPicker()">

    <ion-icon name="md-happy"></ion-icon>

    </button>

    </ion-col>

    <ion-col col-8>

    <ion-textarea placeholder="说点什么吧" [(ngModel)]="editEmoji"></ion-textarea>

    </ion-col>

    <ion-col col-2>

    <button ion-button icon-only clear item-left (click)="sendMessage()">

    <ion-icon name="ios-send"></ion-icon>

    </button>

    </ion-col>

    </ion-row>

    </ion-grid>

    <emoji-pick *ngIf="emojiPickflag" [(ngModel)]="editEmoji"></emoji-pick>

    </ion-footer>

    我们使用ngModel 绑定表情输入到input 中用emojiPickflag 来控制是否显示表情输入,好了,表情输入部分已经搞定了(讲的不咋滴啊。。。。。。)。

    公众号已经更名为:没才艺的普通人

    相关文章

      网友评论

          本文标题:IONIC3 Emoji 选择器

          本文链接:https://www.haomeiwen.com/subject/jhshoftx.html