Blazor入手教程(五)组件

Blazor入手教程(五)组件

 

组件是相当重要的一部分内容。Blazor是一种单页应用模式,单页应用里面万物皆可为组件,

一个页面是一个组件,一段可重用的ui代码也可以做成一个组件。

 

 

Vue中创建组件的方式大概有单文件组件,字符串模板组件等等。

 

Blazor中创建组件的方式和Vue也差不多且更简单。一个.razor文件就是一个组件,这点类似于vue的单文件组件。

 

我们试着创建一个模态框组件吗,单独创建一个文件夹来放置组件。

注意:组件名首字母必须大写。

 

Index.razor 合法

index.razor. 不合法

_index.razor 合法

 

 

 

 

 

 

 

 

调用组件

 

调用组件时只需要像写html标签一样写上去就行了,并可以把参数传递过去

 

 

 

 

写法是不是和vue一毛一样?

 

来看一下效果

 

 

 

而且我们可以看到,每次点击按钮时,就会调用子组件中的SetParametersAsync方法。

 

 

组件参数 [Parameter]

 

[Parameters]不仅仅可以标记路由参数,而且他还可以标记组件参数。

使用[Parameter]特性标记了的属性,表示这是一个组件参数,可以和父组件之间进行通信。(和vue中的props是一个意思,没有标记的只能在组件内部使用,就和vue中的data是一个意思)。

 

 

通过@ref获取子组件引用

 

 

 

 

 获取子组件的引用有两步。

1,在代码里定一个子组件类型的字段

2,在调用组件的标签里面使用@ref 指向第一步定义的字段 (是不是和vue的面的@ref一模一样)

 

 

 

这样我们就可以通过modal直接调用子组件里面的方法

 

 

一个简单的例子

我们使用上面的引用直接修改子组件的属性看看会有什么效果

 

 

 

Vs直接告诉我们,不能在外部修改参数。所以这样式行不通的

 

 

 

子组件修改父组件状态

 

模态框一定会有一个关闭的功能,就像下面这样。点击关闭,修改模态框的showfalse,这段代码是在子组件中,但是修改的应该是父组件的状态,因为模态框的状态show往往是由父组件来维护的。

 

 

 

vue里面子组件修改父组件状态一般有两种常用的方法:

1,使用emit。在子组件里面修改时使用This.$emit(update:data,value),在父组件设置状态为model.sync

2,在父组件使用回调函数。

 

Blazor修改父组件状态也有对应的两种

 

 

 

 

 

方法一

1,在子组件里面定义一个事件,

2,在父组件里面使用组件是设置事件的回调函数

3,子组件里面修改时,通过invoke回调函数来实现修改。

 这种方法的缺点就是必须在父组件里面额外定义一个回调函数,并不是一个实用的方法,着重介绍第二种方法。

 

方法二,使用@bind-参数名

 

1,在定义子组件show 参数的同时,定义一个 EventCallback<bool> 类型的参数,且该参数的名字约定必须是上面定义名字参数名+Changed。

比如:上面定义了一个参数show,那么同时定义一个回调参数showChange,名字必须为showChanged。

2,在子组件内修改状态时使用 showChange.Invoke(this.show),将状态通知到父组件。

3,父组件内设置子组件参数时,不在使用原来的show绑定,而使用@bind-show绑定

  这种方法的优点就是父组件不需要关心子组件。

 

 

 

 

 

 

 

 

级联参数 [CascadingParameter]

 

级联参数可以直接将参数注入到孙组件而不通过子组件,级联参数做一些全局性的设置还是很不错的。

 

使用级联参数步骤:

1,定义父,子,孙三个组件。父组件中使用<CascadingValue  Value="msg"></CascadingValue>

标签包裹子组件,这里的Value参数就是要向下传递的值。

2,父组件中使用子组件,子组件中使用孙组件

3,孙组件中使用[CascadingParameter]标记参数为级联参数。

 

 

 

 

父:

 

 

 

子:

 

 

 

孙:

 

 

 

最终效果:

 

 

posted @ 2020-11-23 15:53  小小爵  阅读(6306)  评论(8编辑  收藏  举报