vue.js循环html文本,Vue.js 指令 v-html v-cloak v-pre v-once

指令(Directives)是特殊的带有前缀v-的特性。指令的值限定为绑定表达式,指令的职责就是当其表达式的值改变时把某些特殊的行为应用到DOM上

HTML:

Hello!

这里,v-if指令将根据表达式greeting值得真假  删除/插入p元素

JS:var vm1=new Vue({

el:'#test01',

data:{

greeting:false

}

});

当greeting取值为false时,查看页面效果和控制台

76fdc446eadb82f6500539142589cdfa.png

当greeting取值为true时,查看页面效果和控制台

cc86d419718753ac733c6926e7f3862e.png这里需要注意的是,v-if="greeting"不能用于根元素之上,也就是说必须用于某一元素的子元素之上,否则,控制台就会报错"[Vue warn]: v-if="greeting" cannot be used on an instance root element."

查看错误示例:

HTML:

Hello!

JS:var vm=new Vue({

el:'p',

data:{

greeting:true

}

});

控制台错误提示:

05ac52205d11a3ed2cadaf57673cf67b.png有些指令可以在其名称后面带一个”参数“(Argument),中间放一个冒号隔开。例如:v-bind指令用于响应地更新HTML特性

HTML:v-bind链接

这里href是参数,它告诉v-bind指令将元素的href特性跟表达式url的值绑定

JS:var vm2=new Vue({

el:'#test02',

data:{

url:'http://cn.vuejs.org/'

}

});

v-on指令用于监听DOM事件

HTML:

`message`

Reverse Message

JS:var vm3=new Vue({

el:'#test03',

data:{

message:'颠倒字体顺序'

},

methods:{

reverseMessage:function(){

//console.log(this)  this指代div#test03

this.message=this.message.split('').reverse().join('')

}

}

});

v-model指令实现双向数据绑定

这个指令只能用在, ,这些表单元素上,所谓双向数据绑定,指的就是在JS实例中的data与其渲染的dom元素上的内容保持一致,二者任何一个被改变,另一个也会相应的更新为相同的内容,这是通过属性访问器实现的。

HTML:

`message`

JS:var vm4=new Vue({

el:'#test04',

data:{

message:'双向数据绑定'

}

});

v-for列表渲染,用作循环遍历,类似ng中的ng-repeat

HTML:

  • `todo`.`text`

JS:var vm5=new Vue({

el:'#test05',

data:{

todos:[

{text:'Learn JavaScript'},

{text:'Learn Vue.js'},

{text:'Learn Angular.js'}

]

}

});

再来两个综合的例子回顾下以上几个指令的用法

HTML:

  • `todo`.`text`

    X

JS:var vm=new Vue({

el:'#zongHe',

data:{

newTodo:'',

todos:[

{text:'add some todos'}

]

},

methods:{

addTodo:function(){

var text=this.newTodo.trim();

if(text){

this.todos.push({text:text}),

this.newTodo=''

}

},

removeTodo:function(index){

this.todos.splice(index,1)

}

}

});

HTML:

`msg`

{{checked ? "yes" : "no"}}

`picked`

one

two

`selected`

one

two

three

`multiSelect`

data: {{$data | json 2}}

JS:var demoVm=new Vue({

el:'#demo',

data:{

msg:'hi!',

checked:true,

picked:'one',

selected:'two',

multiSelect:['one', 'three']

}

});

查看页面截图效果:

a1b689e0b9970a72b68202fba20a8053.png

v-text

v-text 指令可以更新元素的文本内容,文本内容既可以放在 双大括号标签里面,也可以通过 v-text 放在标签内部。区别是放在 v-text 里面在页面加载时不会看到 双大括号 闪烁

示例代码:

`msg`


var vm = new Vue({

el:'#app',

data:{

msg:'页面上有双大括号闪烁吗?'

}

})

页面刚加载时:(用户会看到双大括号标签)

addfdaac2bb22d10e39d36d532a11faf.png

页面加载完毕:

231b59ec6b033c2c6fbdd51231aa9710.png

v-html

v-html 指令可以更新元素的innerHTML,也就是说可以解析并执行HTML代码,与{` `}三大括号标签功能一致。

注意:不建议在网站上直接动态渲染任意HTML 片段,很容易导致XSS***。

var vm = new Vue({

el:'#app',

data:{

msg: 'Hello World!'

}

})

49c2e05a4a746456bdd734b057498db6.png

v-cloak

这个指令保持在元素上直到关联实例结束编译。和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。

简单说,就是防止页面未加载完成时,显示双大括号标签,我们在打开Vue页面时,经常看到类似的界面

87b344b8b52f9846381835c2c721fab1.png

用户看到 `msg` 是非常不好的一种体验,因此,我们可以借助 v-cloak指令解决这个问题html>

[v-cloak]{

display:none;

}

`msg`

var vm = new Vue({

el:'#app',

data:{

msg: 'Hello World!'

}

})

页面刚刷新:(页面是一片空白,什么都没有,也看不到双大括号标签在页面闪烁)

dcbd8c9d0a1f8b747c4ff6a30d677b33.png

页面加载完毕:

500765ee3cb122d5a7b75dc58da0a24a.png

v-once

只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。

这个就完全类似 {{*msg}}标签,直接看一段官网提供的示例代码,此处不单独举例

This will never change: `msg`

comment

`msg`

  • `i`

v-pre

跳过这个元素和它的子元素的编译过程。可以用来显示原始 Mustache 标签。跳过大量没有指令的节点会加快编译。

代码示例如下:

{{ this will not be compiled }} + `msg`

var vm = new Vue({

el:'#app',

data:{

msg: 'Hello World!'

}

})

注意看控制台,这个可没有报错哦

797ad6d000dc3deeabadd2f2d3e479c8.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值