Vue初出茅庐(二)

Vue_2.0


在这里插入图片描述


循环
v-for
<div id="div1">
	<table align="center" >
		<tr class="firstLine">
			<td>name</td>
			<td>hp</td>
		</tr>
		<!--这里的迭代不一定是hero 随意一个能表示意思的就可以-->
		<tr v-for="hero in heros">
			<td>{{hero.name}}</td>
			<td>{{hero.hp}}</td>
		</tr>
	</table>

</div>  
<script>
//搞个数组
var data = [
   		  {name:"盖伦",hp:341},
		  {name:"提莫",hp:225},
    ];
new Vue({
      el: '#div1',
      data:	{
    	  heros:data//这里不能加;的
      }
    })  
</script>


<!--这里迭代的过程还可以加个下标inddex(不一定是index,i也可以-->
<tr v-for="hero,index in heros">
			<td>{{index}}</td>
			<td>{{hero.name}}</td>
			<td>{{hero.hp}}</td>
</tr>
纯数字遍历
<div id="div1">
    <div v-for="i in 10">
     {{i}}
    </div>
</div>
   
<script>
    new Vue({
          el: '#div1'
        })
</script>

属性绑定
<!-- 完整语法 --><v-bind:href >  
<!-- 缩写 -->< :href >

<!-- v-blind: 用于绑定属性 可以使后面属性中的js表达式合法 -->
<!-- 通俗的说 就是如果不绑定这个属性 鼠标放到这个按钮上提示的就是mytitle这个字符串 而不是js中的mytitle的值hhh -->
<div id="div1">
	<input type="button" value="按钮" v-bind:title="mytitle">
</div>
    
<script>
new Vue({
      el: '#div1',
      data:{
          mytitle:'hhh'
      }
    })
</script>

button标签显示的内容可以使图片等非文字元素,但type=button元素不行,因为type=button本身就是标签中元素的一个值,不可以像button标签一样嵌套类似img的标签(奇怪的知识增加了↑


双向绑定

之前绑定属性,把Vue对象数据显示在视图上,那我们想把视图上的数据放到Vue对象上就可以用到这个(比如input)

<div id="div1">
	hero name: <input v-model="name">
	<button @click="Click">提交数据</button>
</div>

<script>
new Vue({
      el: '#div1',
      data:{
         name:"hhh"
      },
	  methods:{
          Click:function(){
              alert(this.name);
          }
      }
    })
</script>
<!--灵活运用-->
<div id="div1"> 
    <table align="center">      
        <tr>
            <td>
                <input v-model="input" placeholder="输入数据">
            </td>
            <td>
                <p>{{ input }}</p>   
            </td>
        </tr>
		
        <tr>
            <td>
              <select v-model="selected">
                <option disabled value="">请选择</option>
				<option>AD</option>
                <option>ADC</option>
              </select>
            </td>
            <td>
                <p>{{ selected }}</p>   
            </td>
        </tr>
    </table>
  
</div>   
<script>
new Vue({
      el: '#div1',
      data: {
          input:'',
          selected:''    
      }
    })
</script>
.lazy

上述的这种v-model绑定是同步绑定 一旦数据变化就绑定,我们可以加一手.lazy 监听这个改变 当失去焦点才绑定数据

<input v-model.lazy="input" placeholder="输入数据">
<p>{{ input }}</p>
这样的话 只有离开输入框 绑定的地方数据才会改变
.number

有时候,拿到了数据需要进行数学运算, 为了保证运算结果,必须先把类型转换为number类型,而v-model默认是string类型,所以就可以通过.number方式确保绑定到的是数字类型了。

<input v-model="input1" type="number" placeholder="输入数据">
<input v-model.number="input"  type="number" placeholder="输入数据">
//首先type=“number”保证输入的一定是数字
再来看区别:
第一个绑定的数据是string类型的  第二个是number类型的
.trim

去掉绑定数据前后的空白


计算属性
computed

进行运算时,我们的常规做法是

¥: <input type="number" v-model.number = "rmb"/>
<td align="center">
 	$: {{ rmb/exchange }}
</td>
<script>
new Vue({
      el: '#div1',
      data: {
          exchange:6.4,
          rmb:0
      }
 })
</script>

当运算过程复杂以后,我们可以用method方法来封装调用

¥: <input type="number" v-model.number = "rmb"  />
<td align="center">
	$: {{ getDollar() }}
</td>
<script>
new Vue({
      el: '#div1',
      data: {
          exchange:6.4,
          rmb:0
      },
      methods:{
          getDollar:function() {
              return this.rmb / this.exchange;
          }
      }
    })
</script>

但是我们还可以把运算过程放到computed里面去(调用的时候不用加() 它不是一个方法 而是把计算好的东西赋给dollar)

¥: <input type="number" v-model.number = "rmb"  />
<td align="center">
    $: {{ dollar }}
</td>
<script>
new Vue({
      el: '#div1',
      data: {
          exchange:6.4,
          rmb:0
      },
      computed:{
          dollar:function() {
              return this.rmb / this.exchange;
          }
      }
    })
</script>
区别

computed 是有缓存的,只要rmb没有变化,dollar 会直接返回以前计算出来的值,而不会再次计算。 这样如果是复杂计算,就会节约不少时间。
而methods每次都会重新调用


监听属性
watch

监听某个值,当其发生变化执行相应的操作

(和computed的区别是:watch更适用于监听某一个值的变化并作出操作,比如请求后台接口,而computed适用于计算已有的值并返回结果—还有种说法就是watch适合处理一个数据影响多个数据 computed适用于 一个数据受多个数据影响)

<td align="center">
    ¥: <input type="number" v-model.number = "rmb"  />
</td>
<td align="center">
    $: <input type="number" v-model.number = "dollar"   />
</td>
<script>
new Vue({
      el: '#div1',
      data: {
          exchange:6.4,
          rmb:0,
          dollar:0
      },
      watch:{
          rmb:function(val) {
              this.rmb = val;//val是输入的值
              this.dollar = this.rmb / this.exchange;
          },
          dollar:function(val) {
              this.dollar = val;
              this.rmb = this.dollar * this.exchange;
          },
      }
})
</script>

过滤器
<script> 
new Vue({
      el: '#div1',
      data: {
          data:''
      },
      filters:{
          //首尾字母大写
          capitalize:function(value) {
                if (!value) return '' //如果为空,则返回空字符串
                value = value.toString()
                return value.charAt(0).toUpperCase() + value.substring(1,value.length-1)+value.charAt(value.length-1).toUpperCase()
          }
      }
    })
</script>

这里过滤器是定义在Vue对象里的。 但是有时候,很多不同的页面都会用到相同的过滤器,如果每个Vue对象里都重复开发相同的过滤器,开发维护都不方便。
我们还可以通过全局过滤器的方式,只定义一次过滤器,然后就可以在不同的Vue对象里使用了。

<script>
Vue.filter('capitalize', function (value) {
	if (!value) return ''
	value = value.toString()
	return value.charAt(0).toUpperCase() + value.slice(1)
})
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue Router是Vue.js官方的路由管理器,它可以帮助我们在Vue应用中实现页面之间的导航和路由功能。二级路由是指在一个父级路由下,再嵌套一个子级路由的情况。 在Vue Router中,我们可以通过配置路由的嵌套来实现二级路由。具体步骤如下: 1. 首先,在创建Vue Router实例时,需要定义父级路由和子级路由的关系。可以使用`children`属性来定义子级路由,将其作为父级路由的一个属性。 2. 在父级路由的组件中,需要添加一个`<router-view>`标签,用于渲染子级路由对应的组件。 3. 在子级路由的配置中,需要指定其对应的路径和组件。 下面是一个示例代码,演示了如何配置一个包含二级路由的Vue Router: ```javascript // 导入VueVue Router import Vue from 'vue' import VueRouter from 'vue-router' // 导入父级和子级组件 import ParentComponent from './components/ParentComponent.vue' import ChildComponent from './components/ChildComponent.vue' // 使用Vue Router插件 Vue.use(VueRouter) // 定义路由配置 const routes = [ { path: '/parent', component: ParentComponent, children: [ { path: 'child', component: ChildComponent } ] } ] // 创建Vue Router实例 const router = new VueRouter({ routes }) // 创建Vue实例,并将router配置到实例中 new Vue({ router }).$mount('#app') ``` 在上面的示例中,`ParentComponent`是父级路由对应的组件,`ChildComponent`是子级路由对应的组件。当访问`/parent`路径时,父级组件会被渲染,并且在父级组件中的`<router-view>`标签中渲染子级组件。 希望以上内容能够帮助到你!如果还有其他问题,请继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值