实现效果如:http://www.ligerui.com/demos/filter/filter.htm

代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="WebApplication1.WebForm2" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<style>
.group {
border: 1px solid gray;
padding: 10px;
margin: 10px;
}
</style>
</head>
<body>
<form id="app">
<group v-bind:items="items"></group>
<input type="button" name="name" value="获取值" v-on:click="getValue" />
</form>
</body>
</html>
<script>
var indexs = 1000;
//定义一个组件,其实就是一组条件
var component = Vue.component("group", {
props: ["items"],
data: function () {
return {
}
},
methods: {
addLine: function (event) {
indexs++;
this.items.items.push({
id: indexs,
column: "Id",
local: "equal",
value: "1"
});
},
addGroup:function(){
indexs++;
this.items.items.push({
id: 0,
relation: "and",
items: []
});
},
removeLine: function (id) {
for (var i = 0; i < this.items.items.length; i++) {
if (this.items.items[i].id === id) {
console.log(this.items.items[i]);
this.items.items.splice(i, 1);
break;
}
}
},
removeGroup: function (id) {
for (var i = 0; i < this.items.items.length; i++) {
if (this.items.items[i].id === id) {
console.log(this.items.items[i]);
this.items.items.splice(i, 1);
break;
}
}
}
},
template: '<div class="group"> <div class="line"> <input type="button" name="name" value="新增一行" class="btnAddLine" v-on:click="addLine" /> <input type="button" name="name" value="新增一组" class="btnAddGroup" v-on:click="addGroup" /><input type="button" name="name" value="移除组" v-on:click="$emit(\'remove-group\',items.id)" v-if="items.id" /> </div> <div class="line" v-for="item of items.items" v-if="!item.relation"> <select> <option value="Id">编号</option> <option value="Name">姓名</option> <option value="Age">年龄</option> </select> <select> <option value="大于">大于</option> <option value="小于">小于</option> <option value="等于">等于</option> </select> <input type="type" name="name" value="" /> <input type="button" name="name" value="移除" class="btnRemoveLine" v-on:click="removeLine(item.id)" /> </div> <group v-bind:items="item" v-for="item of items.items" v-if="item.relation" v-on:remove-group="removeGroup"></group> </div>'
}); var app = new Vue({
el: "#app",
data: {
items: {
id: 0,
relation: "and",
items: [{
id: 1,
column: "Id",
local: "equal",
value: "1"
}, {
id: 2,
column: "Id",
local: "equal",
value: "1"
}, {
id: 3,
relation: "and",
items: [{
id: 4,
column: "Id",
local: "equal",
value: "1"
}]
}]
}
},
methods: {
getValue: function () {
console.log(this.items);
}
}
}); </script>

最终运行效果如下:

讲解:

1.经过分析,这个功能涉及到递归功能,于是我们拆分成了一个模块,一个查询组就定义成一个自定义组件group。

2.自定义组件通过props定义父组件向子组件传递的值

3.通过$emit触发当前组件的事件,并可以传递参数,当前组件的父级组件将绑定该事件

4.v-on用于绑定事件,v-for循环节点,v-if判断为true才输出节点

5.data不能是对象,只能是方法的返回,因为页面会引用多个组件,通过方法返回能确保数据的独立

6.关于在自定义组件的template中写入html代码看起来不友好的问题,可以在网上搜索“vue x-template”进行修改。

二、关于template

如上,组件中,template写了很多html代码,阅读起来很不方便,然后vue中提供了如下两种方式

方式一:

<script type="text/x-template" id="group-template">
<div>hello</div>
</script>
<script>
var component = Vue.component("group", {
template: '#group-template'
});
</script>

方式二:

<template id="group-template">
<div>hello</div>
</template>
<script>
var component = Vue.component("group", {
template: '#group-template'
});
</script>

使用vue实现自定义搜索功能的更多相关文章

  1. CI 结合 vue.js 的搜索功能模块

    CI 结合 vue.js 的搜索功能模块 最近在有优化公司后台的某个模块的搜索功能优化 原先的是这个样子的,很是单调: 老大给我找个图希望我能弄成这样子: 经过不断修改,最后成了这样子 是不是比以前好 ...

  2. vue自动完成搜索功能的数据请求处理

    在现在的互联网世界里,自动完成的搜索功能是一个很常见的功能.比如百度.搜狗.360搜索 ... 功能描述一下大概是这个样子的:有一个搜索框,用户在里面输入要查询的条件,系统会“智能”判断用户输完了,然 ...

  3. 用vue实现百度搜索功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 夺命雷公狗---DEDECMS----33dedecms自定义搜索以及分页功能完成

    我们现在要开始实现模版里面的搜索功能了,我们先找要做出一个检索提交表单,如下所示: 只要我们点击生成之后我们的表单就获取到了,可以直接拿生成好的html表单拿来用来测试下.. 将他嵌入首页的模版文件, ...

  5. vue 使用watch监听实现类似百度搜索功能

    watch监听方法,watch可以监听多个变量,具体使用方法看代码: HTML: <!doctype html> <html lang="en"> < ...

  6. Vue下简单分页及搜索功能

    最近利用Vue和element ui仿写了个小页面,记一哈分页和搜索功能的简单实现. 首页   emmmm..... 搜索框输入..... 搜索完成 数据是直接写在这里面的: cardPhoto:[ ...

  7. vue实现搜索功能

    vue实现搜索功能 template 部分 <!-- 搜索页面 --> <template> <div> <div class="goback&qu ...

  8. 自定义SWT控件三之搜索功能下拉框

    3.搜索功能下拉弹出框 package com.view.control.select; import java.util.ArrayList; import java.util.LinkedList ...

  9. PHP+mysql数据库开发搜索功能:中英文分词+全文检索(MySQL全文检索+中文分词(SCWS))

    PHP+mysql数据库开发类似百度的搜索功能:中英文分词+全文检索 中文分词: a)   robbe PHP中文分词扩展: http://www.boyunjian.com/v/softd/robb ...

随机推荐

  1. 微信小程序之回调函数

    在微信小程序中众所周知在js里面得方法都是异步执行,我最近再做项目得时候也遇到了这个问题,再方法里面调用另一个方法里面的接口数据,第一次是调取不到的, 因为两个方法是同时开始执行得,所以怎么都取不到值 ...

  2. STM32F103单片机解密资料

    STM32F103单片机解密资料下载 一.STM32 32位ARM Cortex MCU 基于ARM® Cortex® M 处理器内核的 32位闪存微控制器STM32产品家族,为MCU用户开辟了一个全 ...

  3. linux 邮件服务器—Extmail

    环境: Centos 6.5 :172.16.9.13 (DNS 服务器) Centos 6.5: 172.16.9.11 (postfix 邮件服务器) 安装软件: yum -y install p ...

  4. CentOS 7 Squid代理服务器正向代理-透明代理

    Squid是Linux系统中最常用的一款开源代理服务软件,主要提供缓存加速和应用层过滤控制的功能,可以很好的实现HTTP.FTP.DNS查询以及SSL等应用的缓存代理 透明代理:提供与传统代理相同的功 ...

  5. jpa数据库表实体命名规则 Unknown column 'user0_.create_time' in 'field list'

    数据库,表字段命名是驼峰命名法(createTime),Spring data jpa 在操作表的时候,生成的sql语句中却是create_time, 表字段不对照, Spring data jpa基 ...

  6. 常用MSSQL语句

    现在很少用SQL 写东西,但有时真用起来半天想不起来,看来还是有必要记录一下... 新建表: create table [表名] ( [自动编号字段] int IDENTITY (1,1) PRIMA ...

  7. liunx驱动----系统滴答时钟的使用

    2019-3-12系统滴答定时器中断使用 定义一个timer ​​ 其实就是使用系统的滴答定时器产生一个中断. 初始化timer init_timer函数 实现如下 void fastcall ini ...

  8. Problem 2285 迷宫寻宝 (BFS)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2285 Problem 2285 迷宫寻宝 Accept: 323    Submit: 1247Time Li ...

  9. GO值类型与引用类型

    值类型 值类型包括基本数据类型,int,float,bool,string,以及数组和结构体(struct). 值类型变量声明后,不管是否已经赋值,编译器为其分配内存,此时该值存储于栈上. 值类型的默 ...

  10. JS控制语句(if、for等)、数组(例题)、方法(常用方法介绍)

    控制语句 If if (1>2){ alert() } var a= parseInt(prompt('请输入数字')); if (isNaN(a)) { alert("输入的不是数字 ...