欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

探讨Vue.js的组件和模板

程序员文章站 2022-04-28 23:26:07
摘要: 指令是vue.js中一个重要的特性, 主要提供了一种机制将数据的变化映射为dom行为。 那什么交数据的变化映射为dom行为, vue.js是通过数据驱动的, 所...

摘要:

指令是vue.js中一个重要的特性, 主要提供了一种机制将数据的变化映射为dom行为。 那什么交数据的变化映射为dom行为, vue.js是通过数据驱动的, 所以我们不会直接去修改dom结构, 不会出现类似$('ul').append('<li>one</li>')这样的操作, 当数据变化时,指令会一句设定好的操作对dom进行修改, 这样就可以只关注数据的变化, 而不用去管理dom的变化和状态,

vue的内置指令

1. v-bind

v-bind主要用于绑定dom元素属性(attribute),

即元素属性实际的值是有vm实例中的data属性提供的。

例如:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>vue的指令</title>
  <script src="../vue.js"></script>
</head>
<body>
<!-- html模版 -->
<div id="demo">
  <span v-bind:cutomid="id">{{message}}</span>
</div>
<script>
  //数据
  let obj ={
    message:"hello world",
    id:'123'
  };
 //声明式渲染
  var vm = new vue({
    el:'#demo',
    data:obj  });
</script>
</body>
</html>

v-bind可以简写为“:”,

上述例子可以简写为<span :cotomid="id">

实现效果如下:

探讨Vue.js的组件和模板 

2. v-on

绑定事件监听器,简写为@。

昨天我们也用过,我们简写一下看一下效果

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>vue的指令</title>
  <script src="../vue.js"></script>
</head>
<body>
  <!-- html模版 -->
  <div id="demo">
    <span @click="clickhandle">{{message}}</span>
  </div>
  <script>
    //数据
    let obj = {
      message:"hello vue"
    };
    //声明式渲染
    var vm = new vue({
      el:"#demo",
      data:obj,
      methods:{
        clickhandle(){
            alert("click")
            }
      }
    });
  </script>
</body>
</html>

效果如下:

探讨Vue.js的组件和模板

3.v-html

v-html,参数类型为string,

作用为更新innerhtml,

接受的字符串不会进行编译等操作,

按普通html处理

代码如下

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>vue的指令</title>
  <script src="../vue.js"></script>
</head>
<body>
<!-- html模版 -->
<div id="demo" v-html="html"></div>
<script>
  //数据
  let obj = {
    html:"<div>hello world</div>"
  };
  var vm = new vue({
    el:"#demo",
    data:obj  })
</script>
</body>
</html>

实现效果如下

探讨Vue.js的组件和模板

更多内置指令请查询官网:vue.js指令

模板

html模板

        基于dom的模板,模板都是可解析有效的html

插值

文本:使用“mustache”语法(双大括号){{value}}

    作用:替换实例上的属性值,

    当值改变时,插值内容就会自动更新

原生的html:双大括号输出的是文本,不会解析html

属性:使用v-bind进行绑定,可以响应变化

使用javascript表达式:可以写简单的表达式

字符串模板

template字符串

        template选项对象的属性

        模板将会替换挂在元素。挂在元素的内容都将被忽略。

代码如下

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>template模板</title>
  <script src="../vue.js"></script>
</head>
<body>
  <!--html模板-->
  <div id="demo"></div>
  <script>
    //数据
    let obj = {
      html:"<div>string</div>",
      abc:1
    };
    var str = "<div>hello</div>";
    var vm = new vue({
      el:"#demo",
      data:obj,
      template:str    })
  </script>
</body>
</html>

有木有发现什么惊奇的变化

探讨Vue.js的组件和模板

        根节点只能有一个

        将html结构写在一对script标签中,设置type="x-template"

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>template模板</title>
  <script src="../vue.js"></script>
</head>
<body>
  <!--html模板-->
  <div id="demo">
    <span>vue</span>
  </div>
  <script type="x-template" id="temp">
    <div>
      hello,{{abc}},
      <span>sunday</span>
    </div>
  </script>
  <script>
    //数据
    let obj = {
      html:"<div>string</div>",
      abc:1
    };
    var vm = new vue({
      el:"#demo",
      data:obj,
      template:"#temp"
    });
  </script>
</body>
</html>

实现效果如下:

探讨Vue.js的组件和模板

写在script标签中,还是比较局限,

如果别的文件也是这个结构的时候,

这个就不能重复使用。

模板render函数

render函数

  render 选项对象的属性

  createelement(标签名,{数据对象},[子元素]);

  子元素为文本或者数组

我们还是来一段代码演示

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>render函数</title>
  <script src="../vue.js"></script>
  <style type="text/css">
    .bg{
      background: #ee0000;
    }
  </style>
</head>
<body>
  <div id="demo"></div>
  <script>
    //数据
    let obj = {
    };
    var vm = new vue({
      el:"#demo",
      data:obj,
      render(createelement){
        return createelement(
          //元素名
          "ul",
          //数据对象
          {
            class:{
              bg:true
            }
           },
          //子元素
          [
            createelement("li",1),
            createelement("li",2),
            createelement("li",3)
          ]
        );
      }
    })
  </script>
</body>
</html>

实现效果如下

探讨Vue.js的组件和模板

关于数据对象属性,讲情请参考官网的例子。

vue.js官网

总结

以上所述是小编给大家介绍的vue.js的组件和模板,希望对大家有所帮助