vue快速上手

目录

vue快速上手

vue简介

第一个vue程序

vue的基本语法

Vue的七大属性

vue双向绑定

什么是双向绑定

实现

vue的组件

什么是vue的组件

实现

vue:Axios异步通讯

计算属性

插槽 slot标签

自定义事件


遵守soc原则

vue简介

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用(SPA)提供驱动。

第一个vue程序

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
​
</head>
<body>
<!--view层 模板-->
<div id="app">
    {{message}}
</div>
   
<!--    1.导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
    var vm = new Vue({
        el: "#app",
        //model层:数据
        data:{
            message:"hello,vue!"
        }
    });
</script>
</body>
</html>

效果

 

vue的基本语法

​
<span v-bind:title="message">
        鼠标悬停几秒钟查看动态绑定提示信息
    </span>

v-bind等被成为指令。前缀v-开头的表示Vue的特殊属性

v-if 判断

<body>
​
<div id="app">
<!--  <h1 v-if="ok">yes</h1>-->
<!--  <h1 v-else>no</h1> -->
  <h1 v-if="type=='A'">A</h1>
  <h1 v-else-if="type=='B'">B</h1>
  <h1 v-else>C</h1>
</div>
​
<!--    1.导入vue.js-->
​
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
  var vm = new Vue({
    el: "#app",
    data:{
      ok: true,
      type: 'A'
    }
  });
</script>
​
</body>

v-for循环

<body>
<div id="app">
    <h1 v-for="(item,index) in items">
        {{item.message}}---{{index}}
    </h1>
</div>
​
​
<!--    1.导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
  var vm = new Vue({
    el: "#app",
    data:{
        items: [
            {message: '张三'},
            {message: '李四'}
        ]
    }
  });
</script>
</body>

Vue的七大属性

  • el属性

    • 用来指示Vue编译器从什么地方开始解析Vue的语法,可以说是一个占位符。

  • data属性

    • 用来组织从view中抽象出来的属性,可以说将视图的数据抽象出来存放在data中。

  • methods属性

    • 放置页面中的业务逻辑,js方法一般都放置在methods中

  • template属性

    • 用来设置模板,会替换页面元素,包括占位符。

  • render属性

    • 创建真正的virtual Dom 用js来渲染组件

  • computed属性

    • 用来计算

  • watch属性

    • watch:funtion(new,old){}

    • 监听data中的数据的变化

    • 两个参数,一个返回新值,一个返回旧值

vue双向绑定

什么是双向绑定

vue是一个mvvm框架,即数据双向绑定,即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化。

实现

<body>
​
<!--view层 模板-->
<div id="app">
  请输入文本:<input type="text" v-model="message"> 你输入的:{{message}}</br>
  性别:<input type="radio" name="sex" value="1" v-model="checked">男
  <input type="radio" name="sex" value="0" v-model="checked">女
  <p>
    选着了谁:{{checked==1?'男':'女'}}
  </p>
  下拉框:
  <select v-model="select">
    <option value="" disabled>----请选择----</option>
    <option>A</option>
    <option>B</option>
    <option>C</option>
  </select>
  选择的是:<span>{{select}}</span>
</div>
​
<!--    1.导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
  var vm = new Vue({
    el: "#app",
    //model层:数据
    data:{
      message: "123",
      checked: '1',
      select: ''
    }
  });
</script>
</body>

屏幕的显示数据和用户的操作一致

vue的组件

什么是vue的组件

组件系统是 Vue 的另一个重要概念,因为它是一种抽象,允许我们使用小型、独立和通常可复用的组件构建大型应用。仔细想想,几乎任意类型的应用界面都可以抽象为一个组件树:

例如我们网站存在头部导航,侧边菜单框,共享的内容区等。这些东西都可以是组件。

实现

<body>
<!--view层 模板-->
<div id="app">
​
  <hello v-for="item in items" v-bind:item="item"></hello>
​
</div>
​
<!--    1.导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
  //定义一个vue组件Component
  Vue.component("hello",{
    props: ['item'],
    template:
            // '<h1>今天天气不错,hello vue!</h1>'+
            '<li>{{item}}</li>>'
  });
  var vm = new Vue({
    el: "#app",
    data: {
      items: ["java","vue","前段"]
    }
  });
</script>
</body>

Vue.component(组件,组件对象):定义组件

结构体有两个属性props:元素,template:模板

v-for="item in items":遍历vue里面的实例数组,同时创建相同数量的组件

v-bind:item="item":将遍历的元素绑定到组件的props的定义为item属性中;=号左边是props的item属性,右边是遍历的属性

vue:Axios异步通讯

data.json

{
  "name": "张三",
  "url": "https://www.baidu.com",
  "page": 1,
  "isNonProfit": true,
  "address": {
    "stree": "1",
    "city": "2",
    "country": "chain"
  },
  "links": [
    {
      "name": "bilibili",
      "url": "https://www.bilibili.com/"
    },
    {
      "name": "狂神说",
      "url": "https://www.kuangstudy.com/"
    }
  ]
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<!--V-cloak:解决闪烁问题-->
    <style>
        [v-coack]{
          display: none;
        }
    </style>
<body>
​
<div id="vue" v-cloak>
    <div>{{info.name}}</div>
    <div>{{info.address.country}}</div>
    <a v-bind:href="info.url">点我</a>
</div>
​
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
  var vm=new Vue({
    el: "#vue",
      //data:  属性:vm
      data(){
        return{
            //请求返回的参数必须和json一样
            info:{
                name: null,
                address: {
                    stree: null,
                    city: null,
                    country: null
                },
                url: null
            }
        }
      },
    mounted(){
      axios.get('../data.json').then(response=>(this.info=(response.data)));
    }
  });
</script>
</body>
</html>

通过axios的异步请求get获取到data.json的数据然后赋值到data方法的info里面,然后在div就可以取出来

计算属性

computed: 计算出来的结果保存在属性中~,内存里面,虚拟Dom里面

<body>
​
<div id="app">
    <p>{{currentTime1()}}</p></br>
    <p>{{currentTime2}}</p>
</div>
​
​
​
<!--    1.导入vue.js-->
​
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
    var vm = new Vue({
        el: "#app",
        data:{
            message:"hello,vue!"
        },
        methods: {
            currentTime1: function () {
                return Date.now();//返回时间戳
            }
        },
        computed: {
            currentTime2: function () {//非方法存在缓存,方法名不能和methods里面的一样,否则使用methods里面的
                return Date.now();
            }
        }
    });
</script>
​
</body>
currentTime2时间戳不变,currentTime1在变,说明currentTime2保存到内存中了

插槽 slot标签

<body>
​
<div id="app">
    <todo>
        <todo-title slot="todo-title" :title="title"></todo-title>
        <todo-items slot="todo-items" v-for="item in todoItems" v-bind:item="item"></todo-items>
    </todo>
</div>
​
​
<!--    1.导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
    //slot:插槽
    Vue.component("todo",{
        template:
            '<div>'+
            '<slot name="todo-title"></slot>'+
            '<ul>' +
                '<slot name="todo-items"></slot>' +
            '</ul>'+
            '</div>'
    });
    Vue.component("todo-title",{
        props: ['title'],
        template: '<div>{{title}}</div>'
    });
    Vue.component("todo-items",{
        props: ['item'],
        template: '<li>{{item}}</li>'
    });
    var vm = new Vue({
        el: "#app",
        data:{
            title: '书籍列表',
            todoItems: ['Java','Linux','Python']
        },
    });
</script>
</body>

在第一个模块todo里面有两个插槽

在第二个和第三模板,加入了动态属性,将其插入到第一个模板中

自定义事件

$emit自定义事件

<body>
​
<div id="app">
    <todo>
        <todo-title slot="todo-title" :title="title"></todo-title>
        <todo-items slot="todo-items" v-for="(item,index) in todoItems" v-bind:item="item" :indedx="index" v-on:remove="removeItems(index)" :key="index"></todo-items>
    </todo>
</div>
​
​
<!--    1.导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
    //slot:插槽
    Vue.component("todo",{
        template:
            '<div>'+
            '<slot name="todo-title"></slot>'+
            '<ul>' +
                '<slot name="todo-items"></slot>' +
            '</ul>'+
            '</div>'
    });
    Vue.component("todo-title",{
        props: ['title'],
        template: '<div>{{title}}</div>'
    });
    Vue.component("todo-items",{
        props: ['item','index'],
        //只能绑定当前组件的方法
        template: '<li>{{index}}------{{item}} <button v-on:click="remove">删除</button></li>',
        methods: {
            remove: function (index){
                // alert("111")
                this.$emit('remove',index);
            }
        }
    });
    var vm = new Vue({
        el: "#app",
        data:{
            title: '书籍列表',
            todoItems: ['Java','Linux','Python']
        },
        methods: {
            removeItems: function (index) {
                console.log("删除了"+this.todoItems[index]+"KO")
                this.todoItems.splice(index,1);//一次删除一个元素
            }
        }
    });
</script>
</body>

通过插槽里的模块里面的方法通过$emit和VM的方法进行关联,然后能控制vm里面Data的数据

官网链接中文文档:条件渲染 | Vue.js

官网链接:Vue.js 介绍 — Vue.js 中文文档

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴回答您的问题!要快速上手使用Vue和Canvas进行开发,可以按照以下步骤进行: 1. 首先,在Vue项目中安装`vue-konva`插件,这是一个基于原生Canvas的Vue插件,可以更加方便地进行画布操作。 2. 接下来,在Vue组件中引入并使用`vue-konva`,例如: ``` <template> <v-stage> <v-layer> <v-rect /> </v-layer> </v-stage> </template> <script> import VueKonva from 'vue-konva'; export default { name: 'MyCanvasComponent', components: { 'v-stage': VueKonva.Stage, 'v-layer': VueKonva.Layer, 'v-rect': VueKonva.Rect, }, }; </script> ``` 在上面的代码中,我们创建了一个包含一个矩形的画布组件。 3. 接下来,您可以使用原生Canvas API对您的画布进行进一步的定制,例如: ``` <template> <v-stage> <v-layer> <v-rect /> </v-layer> </v-stage> </template> <script> import VueKonva from 'vue-konva'; export default { name: 'MyCanvasComponent', components: { 'v-stage': VueKonva.Stage, 'v-layer': VueKonva.Layer, 'v-rect': VueKonva.Rect, }, mounted() { const stage = this.$refs.stage.getStage(); const layer = this.$refs.layer.getLayer(); const rect = this.$refs.rect.getKonvaNode(); // 使用原生Canvas API对画布进行定制 rect.fill('red'); layer.draw(); }, }; </script> ``` 在上面的代码中,我们使用`$refs`访问了我们的组件的各个部分,以及使用原生Canvas API将矩形的填充颜色更改为红色。 希望这些步骤对您有所帮助!如果您有其他问题,请随时问我。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值