ts-basic-components-search.md 7.5 KB
Newer Older
E
add doc  
ester.zhou 已提交
1 2
#  Search

E
ester.zhou 已提交
3
The **\<Search>** component provides an area for users to enter search queries.
E
esterzhou 已提交
4

E
ester.zhou 已提交
5 6
> **NOTE**
>
7
> This component is supported since API version 8. Updates will be marked with a superscript to indicate their earliest API version.
E
add doc  
ester.zhou 已提交
8 9 10

## Child Components

E
ester.zhou 已提交
11
Not supported
E
add doc  
ester.zhou 已提交
12 13 14

## APIs

E
ester.zhou 已提交
15
Search(options?: { value?: string; placeholder?: ResourceStr; icon?: string; controller?: SearchController })
E
add doc  
ester.zhou 已提交
16

E
ester.zhou 已提交
17
**Parameters**
E
add doc  
ester.zhou 已提交
18

E
ester.zhou 已提交
19 20
| Name     | Type        | Mandatory| Description                                                    |
| ----------- | ---------------- | ---- | ------------------------------------------------------------ |
E
ester.zhou 已提交
21 22
| value       | string           | No  | Text input in the search text box.                                |
| placeholder | [ResourceStr](ts-types.md#resourcestr)<sup>10+</sup> | No  | Text displayed when there is no input.                                    |
E
ester.zhou 已提交
23
| icon        | string           | No  | Path to the search icon. By default, the system search icon is used. The supported icon formats are .svg, .jpg, and .png.|
E
ester.zhou 已提交
24
| controller  | SearchController | No  | Controller of the **\<Search>** component.                                                    |
E
add doc  
ester.zhou 已提交
25 26 27

## Attributes

E
ester.zhou 已提交
28 29 30 31
In addition to the [universal attributes](ts-universal-attributes-size.md), the following attributes are supported.

| Name                   | Type                                        | Description                                          |
| ----------------------- | ------------------------------------------------ | ---------------------------------------------- |
E
ester.zhou 已提交
32
| searchButton<sup>10+</sup> | value: string,<br>option?: [SearchButtonOption](#searchbuttonoption10)              | Text on the search button located next to the search text box. By default, there is no search button.              |
E
ester.zhou 已提交
33 34 35 36 37
| placeholderColor        | [ResourceColor](ts-types.md#resourcecolor)       | Placeholder text color.                          |
| placeholderFont         | [Font](ts-types.md#font)                         | Placeholder text font.                          |
| textFont                | [Font](ts-types.md#font)                         | Text font for the search text box.                              |
| textAlign               | [TextAlign](ts-appendix-enums.md#textalign)      | Text alignment mode in the search text box.<br>Default value: **TextAlign.Start**   |
| copyOption<sup>9+</sup> | [CopyOptions](ts-appendix-enums.md#copyoptions9) | Whether copy and paste is allowed.                            |
E
ester.zhou 已提交
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| searchIcon<sup>10+</sup>   | [IconOptions](#iconoptions10)                                                  | Style of the search icon on the left.                                      |
| cancelButton<sup>10+</sup> | {<br>style? : [CancelButtonStyle](#cancelbuttonstyle10)<br>icon?: [IconOptions](#iconoptions10) <br>} | Style of the Cancel button on the right.                                      |
| fontColor<sup>10+</sup>    | [ResourceColor](ts-types.md#resourcecolor)                   | Font color of the input text.                                   |
| caretStyle<sup>10+</sup>  | [CaretStyle](#caretstyle10)                                                  | Caret style.                                              |

## IconOptions<sup>10+</sup>

| Name| Type                                  | Mandatory| Description   |
| ------ | ------------------------------------------ | ---- | ----------- |
| size   | [Length](ts-types.md#length)               | No  | Icon size.   |
| color  | [ResourceColor](ts-types.md#resourcecolor) | No  | Icon color.   |
| src    | [ResourceStr](ts-types.md#resourcestr)     | No  | Image source of the icon.|

## CaretStyle<sup>10+</sup>

| Name| Type                                  | Mandatory| Description|
| ------ | ------------------------------------------ | ---- | -------- |
| width  | [Length](ts-types.md#length)               | No  | Caret width.|
| color  | [ResourceColor](ts-types.md#resourcecolor) | No  | Caret color.|

## SearchButtonOption<sup>10+</sup>

| Name   | Type                                  | Mandatory| Description        |
| --------- | ------------------------------------------ | ---- | ---------------- |
| fontSize  | [Length](ts-types.md#length)               | No  | Font size of the button.|
| fontColor | [ResourceColor](ts-types.md#resourcecolor) | No  | Font color of the button.|

## CancelButtonStyle<sup>10+</sup>

| Name                   | Description            |
| ----------------------- | ---------------- |
| CONSTANT<sup>10+</sup>  | The Cancel button is always displayed.|
| INVISIBLE<sup>10+</sup> | The Cancel button is always hidden.|
| INPUT<sup>10+</sup>     | The Cancel button is displayed when there is text input.|
E
add doc  
ester.zhou 已提交
72 73 74

## Events

E
ester.zhou 已提交
75 76 77 78 79 80 81 82 83
In addition to the [universal events](ts-universal-events-click.md), the following events are supported.

| Name                                        | Description                                                  |
| ------------------------------------------- | ------------------------------------------------------------ |
| onSubmit(callback: (value: string) => void) | Invoked when users click the search icon or the search button, or touch the search button on a soft keyboard.<br> - **value**: current text input. |
| onChange(callback: (value: string) => void) | Invoked when the input in the text box changes.<br> - **value**: current text input. |
| onCopy(callback: (value: string) => void)   | Invoked when data is copied to the pasteboard, which is displayed when the search text box is long pressed.<br> - **value**: text copied. |
| onCut(callback: (value: string) => void)    | Invoked when data is cut from the pasteboard, which is displayed when the search text box is long pressed.<br> - **value**: text cut. |
| onPaste(callback: (value: string) => void)  | Invoked when data is pasted from the pasteboard, which is displayed when the search text box is long pressed.<br> -**value**: text pasted. |
E
add doc  
ester.zhou 已提交
84 85 86

## SearchController

E
ester.zhou 已提交
87
Implements the controller of the **\<Search>** component. Currently, the controller can be used to control the caret position.
E
add doc  
ester.zhou 已提交
88

E
ester.zhou 已提交
89
### Objects to Import
E
add doc  
ester.zhou 已提交
90 91 92
```
controller: SearchController = new SearchController()
```
E
ester.zhou 已提交
93
### caretPosition
E
add doc  
ester.zhou 已提交
94

E
ester.zhou 已提交
95
caretPosition(value: number): void
E
add doc  
ester.zhou 已提交
96 97 98

Sets the position of the caret.

E
ester.zhou 已提交
99
**Parameters**
E
add doc  
ester.zhou 已提交
100

E
ester.zhou 已提交
101 102 103
| Name| Type| Mandatory| Description                          |
| ------ | -------- | ---- | ---------------------------------- |
| value  | number   | Yes  | Length from the start of the character string to the position where the caret is located.|
E
add doc  
ester.zhou 已提交
104 105 106

##  Example

E
ester.zhou 已提交
107 108
```ts
// xxx.ets
E
add doc  
ester.zhou 已提交
109 110 111
@Entry
@Component
struct SearchExample {
E
esterzhou 已提交
112 113
  @State changeValue: string = ''
  @State submitValue: string = ''
E
add doc  
ester.zhou 已提交
114 115 116
  controller: SearchController = new SearchController()

  build() {
E
ester.zhou 已提交
117 118 119 120 121
    Column() {
      Text('onSubmit:' + this.submitValue).fontSize(18).margin(15)
      Text('onChange:' + this.changeValue).fontSize(18).margin(15)
      Search({ value: this.changeValue, placeholder: 'Type to search...', controller: this.controller })
        .searchButton('SEARCH')
E
add doc  
ester.zhou 已提交
122
        .width(400)
E
ester.zhou 已提交
123
        .height(40)
E
ester.zhou 已提交
124
        .backgroundColor('#F5F5F5')
E
add doc  
ester.zhou 已提交
125
        .placeholderColor(Color.Grey)
E
ester.zhou 已提交
126 127
        .placeholderFont({ size: 14, weight: 400 })
        .textFont({ size: 14, weight: 400 })
E
add doc  
ester.zhou 已提交
128
        .onSubmit((value: string) => {
E
esterzhou 已提交
129
          this.submitValue = value
E
add doc  
ester.zhou 已提交
130 131
        })
        .onChange((value: string) => {
E
esterzhou 已提交
132
          this.changeValue = value
E
add doc  
ester.zhou 已提交
133
        })
E
ester.zhou 已提交
134 135 136 137 138 139 140
        .margin(20)
      Button('Set caretPosition 1')
        .onClick(() => {
          // Move the caret to after the first entered character.
          this.controller.caretPosition(1)
        })
    }.width('100%')
E
add doc  
ester.zhou 已提交
141 142 143
  }
}
```
E
ester.zhou 已提交
144 145

![search](figures/search.gif)