vue学习资料一(入门、插值、双向绑定)

VUE

构建数据驱动的web界面的库,技术上重点在于MVVM的ViewModel层
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<div>{{msg}}</div>
    <script src="vue.js"></script>
    <script>
    var data = {
        msg: 'hello'
    }
    new Vue({
        el:'div',
        data:data
    })
    </script>
</body>
</html>

如果要改变显示内容

data.msg = 'world'
data.msg = '瑞源先生'

插值

语法: {{key}}
将数据中的数据同步到页面中的过程;

var data = {
        msg:'欧走不力大后天呢 色'
    }
    var demo = new Vue({
        el:'.my-app',
        data:data
    })

不仅仅可以还可以插在Dom节点内容中,还可以插入到属性中:

<div id="app" class="my-app"><span data-id="{{id}}" style={{styles}}>关注</span>{{msg}}</div>

<script src="vue.js"></script>
<script>
var data = {
    msg:'瑞源先生早上好',
    styles:"color:orange",
    id:20
}
var demo = new Vue({
    el:'.my-app',
    data:data
})

如果我想更改其中一个,可以在后面接着写:


data.styles= 'color:green'

关注的颜色就从橘黄色变成了绿色;

单次插值

  • 数据插入页面中,不能再次修改;
###如果我们不想让初始值(只想插值一次)发生变化,我们可以在key前面加上一个 * ,{{ *key}}
<div id="app" class="my-app"><span data-id="{{id}}" style={{*styles}}>关注</span>{{msg}}</div>

这样就一直是橘黄色了;

同样的案例

  • 修改文案内容:
data.msg = '瑞源学堂欢迎您!'
- 如果不想修改初始文案的内容(只想插值一次)我们同样可以在key前面加上一个*,{{*key}},
<div id="app" class="my-app"><span data-id="{{id}}" style={{styles}}>关注</span>{{*msg}}</div>

这样文案内容就不会发生变化;

标签过滤

语法{{{key}}},将数据中的html标签渲染到页面中;

  • 我们想在文案中插入一个标签,把“瑞源先生早上好!”改成“【深圳】瑞源先生在上好!”,【深圳】单独用一个标签包裹,加粗;
var data = {
        msg:'<strong>【深圳】</strong> 瑞源先生早上好!',
        styles:"color:orange",
        id:20
    }

这样页面会把<strong></strong>标签显示出来;
我们需要这样操作:

<div id="app" class="my-app"><span data-id="{{id}}" style={{styles}}>关注</span>{{{*msg}}}</div>

这样就可以了;

插值表达式

插值的过程中,我们可以对插入的数据做运算处理,或调用某些js方法;

  • 如果我们想在id数值面前渲染一个人民币的符号¥
<div id="app" class="my-app">{{'¥' + id}}</div>
var data = {
    id:20
}
var demo = new Vue({
    el:'.my-app',
    data:data
})

¥20就渲染出来了

  • 我们还可以在{{里面进行运算处理}},我们可以进行加减乘除,字符串拼接,对数据进行js方法的调用;
  • 在里面执行的运算也是要遵循运算符的优先级;
<div id="app" class="my-app">{{'¥' + id * 2 }}</div>

结果为¥40

<div id="app" class="my-app">{{'¥' + id * 2 }}<span>{{styles}}</span></div>

var data = {
    styles:'color:orange',
    id:20
}

页面渲染为: ¥40color:green

  • 如果我们想要color:green为大写
<div id="app" class="my-app">{{'¥' + id * 2 }}<span>{{styles.toUpperCase()}}</span></div>

输出为:¥40COLOR:GREEN

插值过滤器

语法{{ key | filter }}
VUE.JS的9289行为我们提供一些内置的过滤器,我们可以直接对插值调用,
比如我们要对数据id:40的值渲染变成美元$40

<div id="app" class="my-app">{{id | currency}}</div> 
var data = {
    styles:'color:orange',
    id:40
}
var demo = new Vue({
    el:'.my-app',
    data:data
})

页面渲染为:$40.00

{{id * 3 | currency}}

页面渲染为: $120.00

{{id | currency '¥'}} 可以使$符号转换为人民币¥符号

  • 过滤器提供了哪些方法?

    • json
    • capitalize
    • uppercase
    • lowercase
    • currency
    • pluralize
    • debounce
  • 大写转换:uppercase

<div id="app" class="my-app">{{id * 3 | currency}}
    <p>{{styles | uppercase}}</p>
</div> 

COLOR:GREEN

  • 小写转换:lowercase
<p>{{tips | lowercase}}</p>
var data = {
    styles:'color:orange',
    tips:'HEllo,WORLd!',
    id:40
}

hello,world!

  • 首字母大写 capitalize
  • 渲染json格式 json

下面两个可以先跳过,待学了更多知识(v-for,methods等)再回头来学习

  • pluralize

功能: 如果只有一个参数,复数形式只是简单地在末尾添加一个 “s”。如果有多个参数,参数被当作一个字符串数组,对应一个、两个、三个…复数词。如果值的个数多于参数的个数,多出的使用最后一个参数。
参数:{String} single, [double, triple, ...

<div class="test">
{{message}}    {{message | pluralize 'item'}} <!--输出: 1 item-->
    <ul v-for="item in lili">
        <li>
            {{item}}    {{item | pluralize 'item'}} <!--输出: 1    item 2    items 3    items-->
        </li>
    </ul>
    <ul v-for="item in lili">
        <li>
            {{item}}    {{item | pluralize 'st' 'rd'}} <!--输出: 1    st 2    rd 3    rd-->
        </li>
    </ul>
    <ul v-for="item in man">
        <li>
            {{item}}    {{item | pluralize 'item'}} <!--输出: 1    item 2    items 3    items-->
        </li>
    </ul>
    <ul v-for="item in man">
        <li>
            {{item}}    {{item | pluralize 'st' 'rd'}} <!--输出: 1    st 2    rd 3    rd-->
        </li>
    </ul>
</div>
<script type="text/javascript">
    var myVue = new Vue({
        el: ".test",
        data: {
            message: 1,
            lili: [1,2,3],
            man: {
                name1: 1,
                name2: 2,
                name3: 3
            }
        }
    })
</script>
  • debounce

(1)限制: 需在@里面使用
(2)参数:{Number} [wait] - 默认值: 300
(3)功能:包装处理器,让它延迟执行 x ms, 默认延迟 300ms。包装后的处理器在调用之后至少将延迟 x ms, 如果在延迟结束前再次调用,延迟时长重置为 x ms。

<div class="test">
    <button id="btn" @click="disappear | debounce 10000">点击我,我将10秒后消失</button>
</div>
<script type="text/javascript">
    var myVue = new Vue({
        el: ".test",
        methods: {
            disappear: function () {
                document.getElementById("btn").style.display= "none";
            }
        }
    })
</script>

动态插值

  • 在插入的过程中,动态的对值进行修改;
    语法:
    computed:{
        key:function(){
            return newKey
        }
    }

示例:

<div id="app" class="my-app">
    <p>{{result}}</p>
    <p>{{result | currency}}</p>
</div> 

var demo = new Vue({
    el:'.my-app',
    computed:{
        result:function(){
            return 40
        }
    }
})

页面渲染为
40
$40.00

  • 我们来看看result这个函数内的作用域是什么,console.log(this)
var demo = new Vue({
    el:'.my-app',
    computed:{
        result:function(){
        console.log(this)
            return 40
        }
    }
})
  • this就是Vue实例化对象,在里面能找到result,值为40,function就是在实例化对象上执行,可以访问Vue对象上的属性;
  • 可以应用表达式过滤器;

来实现一个输入框的值显示的小例子:(非V-方法)

<div id="app">
    <input type="text" id="inp">
    <span>{{result}}</span>
</div>

<script src="vue.js"></script>

<script>
    var demo = new Vue({
        el:"#app",
        data:{
            value:0
        },
        computed:{
            result:function(){
                return this.value * 2
            }
        }
    })
    // 当input输入完之后获取它的值,更新demo的value属性
    document.getElementById('inp').onkeyup = function(e){
        //获取输入框里面输入的值
        var val = e.target.value;
        //赋值给demo下的value
        demo.value = val;
    }
</script>

此时在输入框输入数字就会在后面实时显示结果

数据的双向绑定

  • vue提供了v-model="",属性值是与vue中绑定数据中的数据;
  • 当视图中一些操作,会修改到vue中的数据,同样,vue的数据被修改时会映射到视图中
<div id="app">
    <input type="text" id="inp" v-model="value">
    <span>{{result | currency}}</span>
</div>
<script src="vue.js"></script>

<script>
var demo = new Vue({
    el:"#app",
    data:{
        value:0
    },
    computed:{
        result:function(){
            return this.value
        }
    }
})
</script>

这样我们也实现了上面一个例子中的双向绑定;

  • 以后我们会用到更多的v- 开头的属性;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容