转行小白历险记-2023/11/26 饿了么搜索组件开发

知识点.search搜索组件开发

  • 如何设计一个组件
  • 使用defineEmits 定义组件的事件
  • 如何定义组件的 v-mode
  • 如何使用 CSS变量
  • BEM命名规范

1.需求分析 

2.自定义内容可以通过props定义

2.1自定义事件的背景接口
// 自定义背景、形状等自定义事件的接口
interface Iprops {
  showAction?: boolean
  background?: string
  placeholser?: string
  shape?: string
  modelVaule: string | number
}
const props = defineProps<Iprops>()
2.2自定义事件
// 按回车取消搜索
const onKeypress = (e: KeyboardEvent) => {
  const ENTER_CODE = 13
  if (e.KeyCode === ENTER_CODE) {
    e.preventDefault()
    emits('search', props.modelVaule)
  }
}
// 点击取消出发取消事件
const onClear = () => {
  emits('update:modelVaule', '')
  emits('clear')
}
2.3动态绑定样式和类名
  <div class="op-search" :class="{ 'op-search--show-action': showAction }" :style="{ background }">

3.scss学习

相关学习链接:(1w字)爆肝三天,学习Scss-看这篇就够了 - 掘金 (juejin.cn)

1. 变量 (Variables)

在 SCSS 中,你可以定义变量来存储颜色、字体大小等,以便在整个样式表中重复使用这些值。这有助于维护和修改代码。

$primary-color: #ff5733;
$font-stack: Helvetica, sans-serif;

body {
  color: $primary-color;
  font: 100% $font-stack;
}

2. 嵌套 (Nesting)

SCSS 允许你将 CSS 规则嵌套在另一个规则内部。这可以帮助你以更结构化的方式编写 CSS,使其更接近 HTML 的结构。

nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }

  li { display: inline-block; }

  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}

3. 部分文件和导入 (Partials and Import)

你可以将 SCSS 代码拆分成多个小文件(称为“部分”),然后使用 @import 指令将它们导入到主文件中。这有助于组织和维护大型样式表

// _reset.scss
html,
body,
ul,
ol {
   margin: 0;
   padding: 0;
}

// main.scss
@import 'reset';
body {
  font: 100% Helvetica, sans-serif;
  background-color: #efefef;
}

4. 混合 (Mixins)

混合可以让你创建可重用的代码片段。你可以将一组 CSS 声明打包在一起,并在样式表中的任何位置重复使用这些声明。

@mixin border-radius($radius) {
  -webkit-border-radius: $radius;
  -moz-border-radius: $radius;
  -ms-border-radius: $radius;
  border-radius: $radius;
}

.box { @include border-radius(10px); }

混合更像是封装了一组样式声明的“函数”,而不仅仅是单个值的变量。你可以用 @include 来“调用”这个“函数”

5. 继承 (Inheritance)

SCSS 的继承功能允许你从另一个选择器继承一组属性。这有助于减少重复的代码。

.message {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}

.success-message {
  @extend .message;
  border-color: green;
}

6. 运算 (Operators)

SCSS 允许你在样式表中进行数学运算,如加法、减法、乘法和除法,这对于动态计算尺寸非常有用。

.container { width: 100%; }
.article { width: 600px / 960px * 100%; }

7. 条件语句和循环 (Conditionals and Loops)

SCSS 提供了控制指令,如 @if, @for, @each, 和 @while,让你可以编写更动态和复杂的样式。

@for $i from 1 through 3 {
  .item-#{$i} { width: 2em * $i; }
}
    7.1. @if
  • @if 指令用于根据条件包含一块样式。
  • 如果条件为真,则执行 @if 块内的代码;可以与 @else if@else 结合使用。
  • 类似于其他编程语言中的 if-else 语句。
  • 例子
  • $type: light;
    
    .button {
      @if $type == light {
        background-color: white;
        color: black;
      } @else {
        background-color: black;
        color: white;
      }
    }
    
    7.2. @for
  • @for 指令用于根据指定的起始和结束值进行循环。
  • 可以生成一系列样式规则或复用代码。
  • 类似于其他编程语言中的 for 循环。
  • 例子:
  • @for $i from 1 through 3 {
      .item-#{$i} { width: 100px * $i; }
    }
    
    7.3. @each
  • @each 指令用于遍历列表或映射中的每个项,并对每个项执行代码块。
  • 类似于其他编程语言中的 foreach 循环。
  • 例子:
  • $colors: red, green, blue;
    
    @each $color in $colors {
      .#{$color}-text { color: $color; }
    }
    
    7.4. @while
  • @while 指令用于重复执行代码块,直到条件不再为真。
  • 类似于其他编程语言中的 while 循环。
  • 通常用于当你不知道循环需要执行多少次时。
  • 例子:
  • $i: 1;
    
    @while $i < 10 {
      .item-#{$i} { width: 10px * $i; }
      $i: $i + 1;
    }
    

  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误通常是由于网络连接问题导致的。当你使用vue-cli安装模板时,它会尝试从GitHub上下载模板仓库,但由于连接超时而失败。 解决这个问题的方法有几种: 1. 检查你的网络连接是否正常。确保你的网络连接稳定,并且没有任何防火墙或代理服务器阻止了对GitHub的访问。 2. 使用淘宝镜像。淘宝提供了一个镜像服务,可以加速npm包的下载。你可以使用以下命令将npm的镜像源设置为淘宝镜像: ```shell npm config set registry https://registry.npm.taobao.org ``` 然后再次尝试安装vue-cli模板。 3. 使用cnpm代替npm。cnpm是淘宝团队开发的一个npm镜像,可以加速包的下载。你可以使用以下命令全局安装cnpm: ```shell npm install -g cnpm --registry=https://registry.npm.taobao.org ``` 然后使用cnpm来安装vue-cli模板: ```shell cnpm install -g @vue/cli ``` 注意:使用cnpm可能会导致一些依赖包的版本不一致或者出现其他问题,所以只在遇到下载问题时使用cnpm。 4. 手动下载模板。如果以上方法都无法解决问题,你可以手动下载模板并将其放在本地。首先,从GitHub上找到vuejs-templates/webpack仓库,然后点击"Clone or download"按钮,选择"Download ZIP"将模板下载到本地。解压缩下载的ZIP文件,并将解压后的文件夹作为参数传递给vue-cli的init命令: ```shell vue init /path/to/downloaded/template ``` 这样就可以使用本地的模板进行项目初始化了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值