vue style动态绑定样式_麻雀虽小五脏俱全的Vue入门案例

v2-33c50deeaae5f1688b5fa7f921c7b058_1440w.jpg?source=172ae18b

很多学习vue的同学ES6、CSS等的基础还不是很好,上来就直接通过 vue-cli提供的脚手架来创建webpack + Vue 项目,这样子是很不利于理解框架原理的,本文通过一个简单的html带大家入门vue,给你一个通透的感觉。

功能简介

ToDoList,待办事件记录,主要功能如下:

  1. 增加待办事件
  2. 展示待办事件
  3. 事件标记为已完成
  4. 删除事件

包含的知识点:

  • vue组件生命周期
  • vue中v-bind动态绑定样式
  • v-for、v-bind、 v-on、v-model指令、插值表达式
  • 父子组件相互通信
  • 定义局部组件和全局组件
  • JS中数组的push、splice等操作

创建一个最基本的html,引入vue核心库。定义两CSS样式,用于表示事件是否已经完成。

通过v-model 来实现输入文本框和vue数据对象inputValue的双向绑定;

通过v-on(缩写@) 绑定 ”添加事件“按钮的响应函数;

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<style  type="text/css">
    .activated{
        color: red;
        font-size: 20px;
    }
    .unActivated{
        color: royalblue;
        font-size: 20px;
    }
</style>

</head>
<body>
<div id="app">
    <div>
       <input type="text" v-model="inputValue" name="" id="">
       <button @click="handleClick">添加事件</button>
    </div>
    <ul>
       <!-- 在这里定义子组件 -->
    </ul>
</div>

<script>
  var app = new Vue({
        el: '#app',
        data: {
            todos: [
                { text: 'Learn JavaScript' },
                { text: 'Learn Vue.js' },
                { text: 'Build Something Awesome' }
            ],
            inputValue: ""
        },
        methods:{
            handleClick: function () {
            }
        }
</script>
</body>
</html>

全局组件声明

    Vue.component("Item",{
        props: ['content'],
        template: "<li>{{ content.text }}</li>"
    })
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<style  type="text/css">
    .activated{
        color: red;
        font-size: 20px;
    }
    .unActivated{
        color: royalblue;
        font-size: 20px;
    }
</style>

</head>
<body>
<div id="app">
    <div>
       <input type="text" v-model="inputValue" name="" id="">
       <button @click="handleClick" >submit</button>
    </div>
    <ul>
        <Item v-for="(todo,key) in todos" v-bind:content="todo" v-bind:index="key"  @delete="handleDelete">
        </Item>
    </ul>
</div>

<script>
   //局部组件
    var Item = {
        props: ['content','index'],
        //isActivated是定义在子组件的data里面的,而不是父组件 !!!
        template: `<li @click='handleItemClick' :class="isActivated==0 ? 'activated' : 'unActivated'"> {{ content.text }} </li>`,
        //注意子组件必须用data function !
        data: function () {
            return{
                isActivated: 0
            }
        },
        methods: {
            handleItemClick: function () {
                this.isActivated = this.isActivated === 1 ? 0 : 1
                this.$emit("delete",this.index);
            }
        }
    }
    var app = new Vue({
        el: '#app',
        components:{
            Item
        },
        data: {
            todos: [
                { text: 'Learn JavaScript' },
                { text: 'Learn Vue.js' },
                { text: 'Build Something Awesome' }
            ],
            inputValue: ""
        },
        methods:{
            handleClick: function () {
                if(this.inputValue === ''){
                   return
                }
                let textObj = {text: this.inputValue}
                this.todos.push(textObj)
                this.inputValue = ''
            },
            handleDelete: function (index) {
                alert("确定要删除" + this.todos[index].text + "?")

            }
        }
})
</script>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值