Vue.js基础-13-混入对象(应用示例,同名函数优先级,选项合并,选项优先级,全局混入,Vue.mixin)

1. 混入对象

1.1 简单应用

语法示例

  • 定义混入对象
      var 混入对象名 = {
    
    
        created: 操作
      };
  • 组件中引用混入对象
      new Vue({
    
    
        component: {
    
    
          mixins: [混用对象名],
        }

完整示例

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>CROW-song</title>
    <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
  </head>
  <body>
    <div id="databinding"></div>


    <script type="text/javascript">
      new Vue({
      
      
        el: "#databinding",
        component: {
      
      
          mixins: [myMixin],
        }
      });
      // 定义一个混入对象
      var myMixin = {
      
      
        created: document.write("混入实例"),
      };

    </script>
  </body>
</html>

1.2 定义一个组件引用混入对象

语法示例

  • 定义混入对象
      var 混入对象名 = {
    
    
        created: 操作
      };
  • 定义一个组件来扩展vue实例
      var 组件名 = Vue.extend({
    
    
        mixins: [myMixin],
      });
  • 初始化组件实例
new 组件名();

完整示例

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>CROW-song</title>
    <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
  </head>
  <body>
    <div id="databinding"></div>
    <script type="text/javascript">
      var vm = new Vue({
      
      
        el: "#databinding",
      });
      // 定义一个混入对象
      var myMixin = {
      
      
        created: document.write("混入实例"),
      var Component = Vue.extend({
      
      
        mixins: [myMixin],
      });
      new Component();
    </script>
  </body>
</html>

2.3 混入对象使用函数

示例(在混入对象中直接定义函数)

将上例替换如下:

      var myMixin = {
    
    
        created: function () {
    
    
          document.write("混入实例");
        },
      };

示例(混入对象引用methods中函数)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>CROW-song</title>
    <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
  </head>
  <body>
    <div id="databinding"></div>
    <script type="text/javascript">
      var vm = new Vue({
      
      
        el: "#databinding",
        data: {
      
      },
        methods: {
      
      },
      });
      var myMixin = {
      
      
        created: function () {
      
      
          //引用methods中函数
          this.startmixin();
        },
        methods: {
      
      
          startmixin: function () {
      
      
            document.write("混入实例");
          },
        },
      };
      var Component = Vue.extend({
      
      
        mixins: [myMixin],
      });
      var component = new Component();
    </script>
  </body>
</html>

2. 同名函数优先级(vue实例 VS 混入对象)

2.1 选项合并(实例下直接选项)

说明

Vue 实例与混入对象包含了相同的方法。两个函数将合并,并且一起输出。

完整示例

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>CROW-宋</title>
    <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
  </head>
  <body>
    <div id="databinding"></div>
    <script type="text/javascript">
      var mixin = {
      
      
        created: function () {
      
      
          document.write("混入调用" + "<br>");
        },
      };
      new Vue({
      
      
        mixins: [mixin],
        created: function () {
      
      
          document.write("组件调用" + "<br>");
        },
      });
    </script>
  </body>
</html>
  • 结果输出
混入调用
组件调用

2.2 选项优先级(实例下methods的选项)

说明

Vue实例和混入对象实例中的methods下有同名函数,则Vue实中的methods下的同名函数优先级高

完整示例

说明:

  • 混入对象:methods中包含两个方法,一个无同名的(mixinfunction),一个和vue实例中同名的(samemethod)。
  • vue实例:methods包含两个方法,一个无同名的(vmfunction),一个和混入对象中同名的(samemethod)。

按预期,mixinfunction、vmfunction和vue实例中的 samemethod 将被打印出来

  • 代码
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>CROW-SONG</title>
    <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
  </head>
  <body>
    <div id="databinding"></div>
    <script type="text/javascript">
      var mixin = {
      
      
        methods: {
      
      
          mixinfunction: function () {
      
      
            document.write("混入对象中的方法" + "<br>");
          },
          samemethod: function () {
      
      
            document.write("混入对象中的同名方法" + "<br>");
          },
        },
      };
      var vm = new Vue({
      
      
        mixins: [mixin],
        methods: {
      
      
          vmfunction: function () {
      
      
            document.write("Vue实例中的方法" + "<br>");
          },
          samemethod: function () {
      
      
            document.write("Vue中同名方法" + "<br>");
          },
        },
      });
      vm.mixinfunction();
      vm.vmfunction();
      vm.samemethod();
    </script>
  </body>
</html>
  • 结果显示
混入对象中的方法
Vue实例中的方法
Vue中同名方法

3. 全局混入

  • 完整代码
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>CROW-SONG</title>
    <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
  </head>
  <body>
    <script type="text/javascript">
      // 为自定义的选项 'myOption' 注入一个处理器。
      Vue.mixin({
      
      
        created: function () {
      
      
          var myOption = this.$options.vueOption; 
          document.write(myOption);          
        },
      });

      new Vue({
      
      
        vueOption: "HELLO !",
      });

    </script>
  </body>
</html>
  • 结果显示
HELLO !

猜你喜欢

转载自blog.csdn.net/xingzuo_1840/article/details/125098850