Node.js开发 ---- 拼音检索

最近开发微信服务号 遇到
客户管理-按拼音检索-左滑删除-并支持修改,
先在前台写了按abcd分组排序的方法,
然后在服务器端处理 汉字转拼音 还是挺方便的。

最终效果如图,类似通讯录
这里写图片描述

数据库里存了一个转化来的”pinyin”字段:
这里写图片描述

后端实现汉字转拼音

var pinyin = require("pinyin");//引入模块

app.post('/api/users', function(req, res) {
    var name = req.body.name; //前台输入的angualr {{ name }}
    name = pinyin(name); //调用方法
    ……
}

前端获取数据后abcd分组排序

function sortAbc(arr){
        const letter=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
        let data = [];
        const div = document.getElementById("div");
        let Html="";
        for (let i = 0; i < letter.length; i++) {
            data[i]=[];
            data[i][0]=letter[i];
            data[i][1]=[];
            for(let j=0;j<arr.length;j++){  
                if(arr[j].name.substring(0,1) == letter[i][0]){
                    data[i][1].push(arr[j].name);   
                }                       
            }       
        }

        //循环删除重复元素
        let result = data;  
        for (let i = data.length - 1; i >= 0; i--) {
            if(result[i][1].length==0){
                result.splice(i, 1);            
                //console.log(i)
            }

        }
        console.log(result)
    }

    sortAbc(myArr)//调用

angular多维数组嵌套(在strackoverflow上看到的demo)

<div ng-app>
    <div ng-controller="test">
        <div ng-repeat="links in slides">
            <hr/>
            <div ng-repeat="link in links track by $index">
                {{link}}
            </div>
        </div>
    </div>
</div>
function test($scope) {
    $scope.slides = [
        [ 1, 1, 1 ],
        [ 4, 5, 6 ],
    ];
}

有关拼音的修改完整如下:

//public/list.html
<div class="contain" style="background:#f0f0f0">        
    <div class="all">
        <ul ng-repeat="names in slides" class="ul" >
            <span>{{ names[0] }}</span>
            <li ng-repeat="name in names[1] track by $index" class="li">
                {{ names[1][$index] }}

                <a ng-click="deleteTodo(names[2][$index])">删除</a>  |
                <a ng-href="#/edit/{{ names[2][$index] }}/{{ names[3][$index] }}">编辑客户</a>
            </li>

        </ul>
        <a ng-href="#/add" class="addbtn">+</a>
    </div>
</div>
//public/app.js
var app = angular.module('App', ['ngRoute']);

app.config(function($routeProvider) {
    $routeProvider
        .when('/', {
            templateUrl: 'list.html',
            controller: 'listController'
        })
        .when('/edit/:id/:_id', {
            templateUrl: 'edit.html',
            controller: 'editController'
        })
        .when('/add', {
            templateUrl: 'add.html',
            controller: 'addController'
        })
});


//list.html
function listController($scope, $http) {
    // read
    $http.get('/api/todos')
        .success(function(data) {
            const letter=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
            let names = [];
            const div = document.getElementById("div");
            let Html="";
            for (let i = 0; i < letter.length; i++) {
                names[i]=[];
                names[i][0]=letter[i];
                names[i][1]=[];
                names[i][2]=[];
                names[i][3]=[];
                for(let j=0;j<data.length;j++){ 
                    if(data[j].pinyin.substring(0,1) == letter[i]){
                        names[i][1].push(data[j].text); 
                        names[i][2].push(data[j]._id);  
                        names[i][3].push(data[j].index);    

                    }

                }

            }           
            $scope.slides = names;
            console.log(names)
            console.log($scope.slides)

        })
        .error(function(data) {
            console.log('Error: ' + data);
        });


    // delete
    $scope.deleteTodo = function(id) {
        $http.delete('/api/todos/' + id)
            .success(function(data) {
                const letter=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
            let names = [];
            const div = document.getElementById("div");
            let Html="";
            for (let i = 0; i < letter.length; i++) {
                names[i]=[];
                names[i][0]=letter[i];
                names[i][1]=[];
                names[i][2]=[];
                names[i][3]=[];
                for(let j=0;j<data.length;j++){ 
                    if(data[j].pinyin.substring(0,1) == letter[i]){
                        names[i][1].push(data[j].text); 
                        names[i][2].push(data[j]._id);  
                        names[i][3].push(data[j].index);    

                    }

                }

            }

            $scope.slides = names;
            console.log(names)
            console.log($scope.slides)
            })
            .error(function(data) {
                console.log('Error: ' + data);
            });
    };



}


//edit.html
function editController($scope, $http ,$routeParams) {
    var index = $routeParams._id;  

    // read
    $http.get('/api/todos')
        .success(function(data) {
            $scope.todo = data[index]; 
        })
        .error(function(data) {
            console.log('Error: ' + data);
        });

    // updata
    $scope.updateTodo = function() {    
        var id =  $routeParams.id;
        if(!$scope.todo.text){
            alert("请输入活动名称后再保存")
            return false;
        }

        $http.post('/api/editit/' + id, $scope.todo)
            .success(function(data) {       
                $scope.todos = data;
                console.log(data);
                setTimeout(function(){
                    window.location.href = '#/';
                },500);
            })
            .error(function(data) {
                console.log('Error: ' + data);
            });
    };

};



//add.html
function addController($scope, $http) {

    $http.get('/api/todos')
        .success(function(data) {
            $scope.num= data.length;
        })

    $scope.createTodo = function() {
        if(!$scope.todo.text){
            alert("请输入活动名称后再保存")
            return false;
        }


        var index=$scope.num;  
        $http.post('/api/todos/'+index, $scope.todo)
            .success(function(data) {
                setTimeout(function(){
                    window.location.href = '#/';
                },500);
            })
            .error(function(data) {
                console.log('Error: ' + data);
            });
    };
};
//route/index.js
var Todo = require('./todo');
var pinyin = require("pinyin");

module.exports = function(app) {
    //查
    app.get('/api/todos', function(req, res) {      
        Todo.find(function(err, todos) {
            if (err)
                res.send(err)
            res.json(todos); 
        });
    });

    //增
    app.post('/api/todos/:index', function(req, res) {
        var myDate = new Date();
        var addDate = myDate.toLocaleDateString()
        var addHour = myDate.getHours(); 
        var addMinutes = myDate.getMinutes(); 
        if(addMinutes<10){      
            addMinutes="0" + addMinutes;
        }

        var str = addDate+" "+addHour+":"+addMinutes;
        var index= req.params.index;
        var text =  req.body.text;
        text = pinyin(text);
        console.log(text);

        Todo.create({
            text : req.body.text,
            pinyin :text, 
            date : str,
            index : index
        }, function(err, todo) {
            if (err)
                res.send(err);

            Todo.find(function(err, todos) {
                if (err)
                    res.send(err)
                res.json(todos);
            });
        });

    });

    //删
    app.delete('/api/todos/:todo_id', function(req, res) {
        Todo.remove({
            _id : req.params.todo_id
        }, function(err, todo) {
            if (err)
                res.send(err);

            Todo.find(function(err, todos) {
                if (err)
                    res.send(err)
                res.json(todos);
            });
        });
    });

    //改
    app.post('/api/editit/:todo_id', function(req, res) {
        var id = req.params.todo_id;
        var text = req.body.text;
        console.log(text);              
        var myDate = new Date();
        var addDate = myDate.toLocaleDateString()
        var addHour = myDate.getHours(); 
        var addMinutes = myDate.getMinutes(); 
        if(addMinutes<10){      
            addMinutes="0" + addMinutes;
        }
        var textpy = pinyin(text);
        var newstr = addDate+" "+addHour+":"+addMinutes;    
        var updatestr = {'text': text,'date': newstr,"pinyin":textpy};



        Todo.findByIdAndUpdate(id, updatestr, function(err, todo) {
            if (err)
                res.send(err);

            Todo.find(function(err, todos) {
                if (err)
                    res.send(err)
                res.json(todos);
            });
        });
    });



    app.get('*', function(req, res) {
        res.sendfile('./public/index.html');
    });
};

完整项目:https://github.com/MMMsCheng/clientPY

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值