表单操作

解决ob:observer toString()
image.png


自定义指令

全局指令

  1. <input type="text" v-focus>
  2. Vue.directive('focus', {
  3. inserted:function(el){
  4. el.focus();
  5. }
  6. })

image.png

局部指令

image.png

  1. var vm = new Vue({
  2. el:'#app',
  3. data() {
  4. return {
  5. blue:'blue'
  6. }
  7. },
  8. methods: {
  9. },
  10. directives:{
  11. color:{
  12. bind:function(el,binding){
  13. el.style.color = binding.value
  14. }
  15. }
  16. }
  17. })

计算属性

computed

  1. <div id="app">
  2. <div>{{reverseString}}</div>
  3. </div>
  4. <script>
  5. var vm = new Vue({
  6. el:'#app',
  7. data() {
  8. return {
  9. msg:'hello'
  10. }
  11. },
  12. methods: {
  13. },
  14. computed:{
  15. reverseString:function(){
  16. return this.msg.split('').reverse('').join('')
  17. }
  18. }
  19. })
  20. </script>

计算属性与方法的区别

image.png
节省性能

  1. <div id="app">
  2. <div>{{sumnum}}</div>
  3. </div>
  4. <script>
  5. var vm = new Vue({
  6. el:'#app',
  7. data() {
  8. return {
  9. num:100
  10. }
  11. },
  12. computed:{
  13. sumnum:function(){
  14. var total = 0;
  15. for(var i = 0; i<=this.num;i++){
  16. total += i;
  17. }
  18. return total
  19. }
  20. }
  21. })
  22. </script>

过滤器

全局以及局部过滤器

image.png

  1. <div id="app">
  2. <input type="text" v-model='msg'>
  3. <div>{{msg | upper}}</div>
  4. <div>{{msg | upper | lower}}</div>
  5. <div :id='msg | upper'>过滤属性</div>
  6. </div>
  7. <script>
  8. Vue.filter('upper',function(e){
  9. return e.charAt(0).toUpperCase() + e.slice(1)
  10. })
  11. var vm = new Vue({
  12. el:'#app',
  13. data() {
  14. return {
  15. msg:''
  16. }
  17. },
  18. methods: {
  19. },
  20. filters:{
  21. lower:function(e){
  22. return e.charAt(0).toLowerCase() + e.slice(1)
  23. }
  24. }
  25. })
  26. </script>

带参数过滤器

image.png

  1. <div id="app">
  2. <div>{{date | format('yyyy-MM-dd')}}</div>
  3. </div>
  4. <script>
  5. var vm = new Vue({
  6. el:'#app',
  7. data() {
  8. return {
  9. date:new Date()
  10. }
  11. },
  12. filters:{
  13. format:function(v,arg){
  14. if(arg == 'yyyy-MM-dd'){
  15. var res = ''
  16. res += v.getFullYear() + "-" + (v.getMonth() + 1) + "-" + v.getDate()
  17. }
  18. return res
  19. }
  20. }
  21. })
  22. </script>

侦听器

数据一旦发生变化就通知侦听器所绑定的方法
用于 数据量大 数据变化时执行异步或开销大的操作
image.png

  1. <div id="app">
  2. <input type="text" v-model='uname'>
  3. <span>{{tip}}</span>
  4. </div>
  5. <script>
  6. var vm = new Vue({
  7. el:'#app',
  8. data() {
  9. return {
  10. uname:'',
  11. tip:''
  12. }
  13. },
  14. methods: {
  15. checkname(uname){
  16. //模拟
  17. setTimeout(()=>{
  18. if(this.uname == 'admin'){
  19. this.tip = '已存在'
  20. }else{
  21. this.tip = '可以使用'
  22. }
  23. },2000)
  24. }
  25. },
  26. watch: {
  27. uname:function(val){
  28. this.checkname(val);
  29. this.tip = '验证中'
  30. }
  31. },
  32. })
  33. </script>

生命周期

8个生命周期
钩子函数
image.png