Blogger Information
Blog 62
fans 2
comment 1
visits 42250
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PartIII 06 模块与vue简介(0907mon)
老黑
Original
890 people have browsed it

主要内容:模块与vue简介

  1. 模块理解:通过导入js来实现一定功能
  2. 在js文件中实现export,在html的js中import
    • 四个步骤:功能模块实现 -> export -> import -> 具体功能实现
    • 包括变量、函数、类都可以export、import
    • 如果具体模块(例如变量、函数、类)与html中的定义名重复,可以通过别名的方式来实现。
    • 可以单独export、import,也可以一次性或分批
    • 用*统一导入,用对象做“挂载点”,然后用key的方式来进行调用
    • js中的默认值设置只有一个,在import中可以随意设置名称来进行绑定
  3. 按照自己的理解:vue可以认定为一个帮助dom便捷绑定数据、改变属性等的工具或插件
  4. vue中的数据代理和委托

1. 模块理解:通过导入js来实现一定功能

  • 例如分别创建两个js,一个声明,一个调用使用
  • 然后在html调用两者,进行实现。

  • test1.js

  1. let username = "admin";
  • test2.js
  1. console.log(username);
  • demo1.html
    这样就可以输入结果
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>通过不同的js文件来模拟模块</title>
  7. </head>
  8. <body>
  9. <script src="test1.js"></script>
  10. <script src="test2.js"></script>
  11. </body>
  12. </html>

2. 在js中实现并export,在html在import并实现

  • 四个步骤:功能模块实现 -> export -> import -> 具体功能实现
  • 包括变量、函数、类
  • 两个小技巧:
    • 如果具体模块(例如变量、函数、类)与html中的定义名重复,可以通过别名的方式来实现。
    • 可以单独export、import,也可以一次性或分批
  • module目录下的user.js
  1. // 模块
  2. // export let id = 1;
  3. // export let username = "peter-zhu";
  4. // export let email = "peter@php.cn";
  5. let id = 1;
  6. let username = "peter-zhu";
  7. let email = "peter@php.cn";
  8. // 首选
  9. export { id, username, email };
  10. // 函数
  11. // export function say() {
  12. // return "Hello " + username;
  13. // }
  14. // 类
  15. // export class Product {
  16. // constructor(name, price) {
  17. // this.name = name;
  18. // this.price = price;
  19. // }
  20. // }
  21. // 函数
  22. function say() {
  23. return "Hello " + username;
  24. }
  25. // 类
  26. class Product {
  27. constructor(name, price) {
  28. this.name = name;
  29. this.price = price;
  30. }
  31. }
  32. // 统一导出
  33. // export { say, Product };
  34. export { say as sayHello, Product };
  35. // sayHello就是别名
  36. // 不支持下面这种动态导出,同样html中不支持动态导入
  37. // if (true) {
  38. // export status = true;
  39. // }
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>模块</title>
  7. </head>
  8. <body>
  9. <script src="module/user.js" type="module"></script>
  10. <script type="module">
  11. // es6模块: 静态
  12. import { id, username, email } from "./module/user.js";
  13. console.log(id);
  14. console.log(username);
  15. console.log(email);
  16. function say() {}
  17. // 导入的别名函数
  18. import { sayHello } from "./module/user.js";
  19. console.log(sayHello());
  20. import { Product } from "./module/user.js";
  21. // 类的实例化
  22. console.log(new Product("方便面", 10));
  23. </script>
  24. </body>
  25. </html>

3. 用*统一导入,用对象做“挂载点”

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>统一导入全部成员</title>
  7. </head>
  8. <body>
  9. <script src="./module/user.js" type="module"></script>
  10. <script type="module">
  11. // 用*代码外部导入的全部模块成员
  12. // 用user对象表示所有模块导入的外部成员在本脚本中的"挂载点/对象"
  13. import * as user from "./module/user.js";
  14. console.log(user);
  15. // 这个时候所有的导入变成一个对象,具体见下面的图。然后就可以像访问对象一样访问对象属性了。
  16. console.log(user.username, user.email);
  17. console.log(user.sayHello());
  18. console.log(new user.Product("电脑", 8999));
  19. console.log(new user.Product("电脑", 8999).name);
  20. console.log(new user.Product("电脑", 8999).price);
  21. //下面这种动态的模块目前是不支持的。
  22. // if (true) {
  23. // import { id } from "./module/user.js";
  24. // }
  25. </script>
  26. </body>
  27. </html>

将import中的所有东西变成一个对象。下面是通过console.log看到的东西。


4. 模块使用中的默认值

  • js中的默认值设置只有一个,在import中可以随意设置名称来进行绑定

  • default.js内容

  1. // export default 250;
  2. // 因为一个模块仅允许有一个默认值
  3. // export default function () {
  4. // return "我是模块中的默认函数";
  5. // }
  6. function hello() {
  7. return "我是模块中的默认函数";
  8. }
  9. // 默认成员
  10. export default hello;
  11. let count = 100;
  12. let username = "admin";
  13. // 非默认成员
  14. export { count, username };
  15. // 模块的私有成员
  16. let password = "88899";
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>模块默认值</title>
  7. </head>
  8. <body>
  9. <script type="module">
  10. // import a from "./module/default.js";
  11. // console.log(a);
  12. // import b from "./module/default.js";
  13. // console.log(b());
  14. // a或者b名称不重要,因为一般默认值只有一个。
  15. // 导入时,如果既有默认成员 , 又有非默认成员。默认成员写到最前面。
  16. import b, { count, username } from "./module/default.js";
  17. console.log(b());
  18. console.log(count, username);
  19. </script>
  20. </body>
  21. </html>

5. 认识vue.js

  • 网上有一段对vue.js作者的访谈。这人原来是设计出身,因此对前端很感兴趣。学了js。然后有一些出品,被google招聘。

  • 采访 Vue 作者尤雨溪(下面为部分摘录)

当我在美国上大学的时候,老实说,我不知道我想要做什么,而且我的专业是室内艺术和艺术史。当我快毕业时,我感觉很难找到和专业相关的工作。

我盘算着或许我可以去一个适合我的硕士课程,学习更多的技能。我去了 Parsons,读了一个美术设计和技术的硕士。这是一个非常好的专业,因为每个人都是既学习设计也学习编程。他们会教一些比如 openFrameworks,处理,动画算法之类的课程,而且你也必须写应用程序和交互界面。

Parsons 没有真正涉及很多的 JavaScript,但是 JavaScript 很吸引我,因为它能够快速构建一些东西并分享给别人。把它放在网上,通过一个网址,任何有浏览器的人都可以看到。这就是吸引我开始 Web 开发和 JavaScript 编程的原因。

当时 Chrome experiments 这个网站刚刚发布,我深深的被震撼了。我立即开始学习 JavaScript,并开始开发类似 Chrome experiments 的项目。我把这些项目放在我的简历上,然后被 Google 创意实验室的招聘人员注意到了。我加入了Five program。每年创意实验室会招五名应届毕业生,组成一个小组,一个人写文案,一个人搞技术,一个人做平面设计,一个人统筹安排和一个打杂的。

我在 Google 的工作需要在浏览器上进行大量原型设计,于是我想要尽快获得有形的东西。当时有些项目使用了 Angular。Angular 提供了一些用数据绑定和数据驱动来处理 DOM 的方法,所以你不必自己碰 DOM。它也有一些副作用,就是按照它规定的方式来构建代码。对于当时的场景而言实在是太重了。

我想,我可以只把我​​喜欢的部分从 Angular 中提出来,建立一个非常轻巧的库,不需要那些额外的逻辑。我也很好奇 Angular 的源码到底是怎么设计的。我最开始只是想着手提取 Angular 里面很小的功能,如声明式数据绑定。Vue 大概就是这么开始的。

作者:Threeki水机
链接:https://www.jianshu.com/p/3092b382ee80
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 这样的话,按照自己的理解:vue可以认定为一个帮助dom便捷绑定数据、改变属性等的工具或插件

  • vue是MVVM的一个实现,纯数据驱动。MVC对服务器的压力相对大一些?

5-1. MVC

  • M: Model, 从后台获取的数据
  • V: View, 动态展示数据
  • C: Controller, 处理用户请求,完成指定操作
  • 整个数据流是单向的

5-2. MVVM

  • mvc 的扩展。很多东西都放到了前端来执行,而非给服务器太多压力。
  • mvvm: 纯数据驱动
  • 不需要用户主动去操作 DOM 元素

" class="reference-link">

6. Vue实例

  • o:vue的一个作用就是将页面中需要展示的数据不断承接、接管过来
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <!-- 引入vue.js库 -->
  7. <script src="lib/vue.js"></script>
  8. <title>Vue实例</title>
  9. </head>
  10. <body>
  11. <!-- 在页面的挂载点中使用插值来显示变量表达式的值。也叫“大胡子模式” -->
  12. <!-- vue的一个作用就是将页面中需要展示的数据不断承接、接管过来 -->
  13. <div class="app">{{words}}</div>
  14. <script>
  15. // vue实例
  16. const vm = new Vue({
  17. // 配置
  18. // 1. 挂载点
  19. // el: document.querySelector(".app"), 也可以简化为下面的
  20. el: ".app",
  21. // 2. 挂载点中的数据对象/ Model / 模型层
  22. data: {
  23. words: "Hello php中文网",
  24. },
  25. });
  26. // 下面两个是一致的,第一个是原生访问,data前面必须加$。这个叫"数据代理/委托"
  27. console.log(vm.$data.words);
  28. // console.log(vm.words);
  29. console.log(vm.$data.words === vm.words);
  30. </script>
  31. </body>
  32. </html>

7. 数据代理/委托

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>数据代理/委托</title>
  7. </head>
  8. <body>
  9. <script>
  10. const user = {
  11. $base: {
  12. name: "peter zhu",
  13. email: "peter@php.cn",
  14. },
  15. $private: {
  16. mobile: "139*********",
  17. salary: 999999,
  18. },
  19. };
  20. console.log(user.$base.name);
  21. console.log(user.$base.email);
  22. console.log("-------------------");
  23. // 数据访问代理。o:相当于做了一个快捷方式。
  24. // user.$base.name , 想用: user.name就能访问,绕过了$base
  25. // name的访问代理
  26. Object.defineProperty(user, "name", {
  27. get: () => user.$base.name,
  28. set: (value) => (user.$base.name = value),
  29. });
  30. console.log(user.name);
  31. // user.$base.name = "jack";
  32. user.name = "Mike";
  33. console.log(user.name);
  34. // email的访问代理
  35. Object.defineProperty(user, "email", {
  36. get: () => user.$base.email,
  37. set: (value) => (user.$base.email = value),
  38. });
  39. console.log(user.email);
  40. user.email = "a@qq.com";
  41. console.log(user.email);
  42. </script>
  43. </body>
  44. </html>

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:其实, 颠覆本行业的, 往往都是外行人, 例如, 美团颠覆了外卖行业,但自己却并不是餐食企业
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post