Asp.Net core 视图组件ViewComponent

视图组件 ViewComponent

  • 最近用了一下视图组件,还挺方便的,如果遇到公共的部分,可以抽出来,写成视图组件,方便调用
    先上图看一下效果:比如首页的4个画红框的地方是4个模块,有些地方可能要重复用到,那么我们用视图组件就很方便。
    这里写图片描述
  • 开始编码步骤
第一步,先新建一个项目
这里写图片描述
原项目中不是包含Components文件夹的,这个是我自己后加上的,创建好Web项目后,添加文件夹Components

第二步,添加视图组件类
这里写图片描述

创建类过程中,必须要以Name+ViewComponent.cs 为规范,name是自己可以谁意写的名称,此类还必须继承ViewComponent 类,才能实现。接下来在看代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;

// For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860

namespace demoViewComponents.Components
{
    public class OneViewComponent : ViewComponent
    {
        /*
         如果需要构造函数的话,你就创建
             */
        /// <summary>
        /// 构造函数
        /// </summary>
        public OneViewComponent()
        {

        }
        /// <summary>
        /// 异步调用
        /// </summary>
        /// <returns></returns>
        public async Task<IViewComponentResult> InvokeAsync()
        {

            return View();
        }

    }
}

这里说明一下,之前是可以加` public IViewComponentResult Invoke()
{
return View();
} 这个方法,但是现在好像加不了,只能用异步方法,加了会报错,请测试

第三步,添加视图页面
这里写图片描述

必须在Shard文件夹下创建名称为Components的文件夹,再在此文件夹下创建视图组件类的前缀名称Name,如Four文件夹,一般会在此Four文件夹下创建默认的Default.cshtml 页面,如上图所示。也可自己指定名称,不过要在InvokeAsync 方法中返回 return View("three"); 视图的名称,例如Three的视图组件,代码如下:


namespace demoViewComponents.Components
{
    public class ThreeViewComponent : ViewComponent
    {
        public async Task<IViewComponentResult> InvokeAsync()
        {
            return View("three");
        }
    }
}
第四步,页面加载视图组件
<div class="row">
    @await Component.InvokeAsync("One")    


    @await Component.InvokeAsync("Tow")

    @await Component.InvokeAsync("Three")

    @await Component.InvokeAsync("Four")



</div>

通过@await Component.InvokeAsync("Nmae") 的方式来绑定视图组件

说明:视图组件有自己的控制器,所有可以自由自配自己想要显示的数据,跟普通的控制器加载数据是一样的,所以这里我啰嗦了,来一个简单示例,分享给大家

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在 FXGL 中,可以通过 `FXGL.getSceneService().pushScene(targetScene)` 方法来跳转到目标场景。为了方便起见,我们可以创建一个自定义的组件来实现场景跳转功能。 首先,创建一个名为 `SceneSwitchComponent` 的类,继承 `com.almasb.fxgl.entity.component.Component` 类,代码如下: ```java import com.almasb.fxgl.core.serialization.Bundle; import com.almasb.fxgl.entity.component.Component; public class SceneSwitchComponent extends Component { private String targetScene; public SceneSwitchComponent(String targetScene) { this.targetScene = targetScene; } @Override public void onUpdate(double tpf) { // 空实现,不需要实现 onUpdate 方法 } @Override public void onAdded() { // 点击实体时跳转到目标场景 entity.getViewComponent().addEventHandler(MouseEvent.MOUSE_CLICKED, event -> { FXGL.getSceneService().pushScene(targetScene); }); } @Override public void onRemoved() { // 移除事件监听器 entity.getViewComponent().removeEventHandler(MouseEvent.MOUSE_CLICKED, event -> { FXGL.getSceneService().pushScene(targetScene); }); } @Override public void write(Bundle bundle) { bundle.put("targetScene", targetScene); } @Override public void read(Bundle bundle) { targetScene = bundle.get("targetScene"); } } ``` 这个组件包含一个 `targetScene` 字段,表示要跳转的目标场景名称。在 `onAdded()` 方法中,我们为实体的 `ViewComponent` 添加了一个鼠标点击事件监听器,当用户点击实体时,就会自动跳转到目标场景。`onRemoved()` 方法用于在移除组件时移除事件监听器。 接下来,在需要使用场景跳转功能的实体上添加 `SceneSwitchComponent` 组件即可。例如,我们可以创建一个名为 `Button` 的实体,代码如下: ```java import com.almasb.fxgl.entity.Entities; import com.almasb.fxgl.entity.Entity; import javafx.geometry.Pos; import javafx.scene.paint.Color; import javafx.scene.text.Font; import javafx.scene.text.Text; public class Button extends Entity { public Button(String text, String targetScene) { Text textNode = new Text(text); textNode.setFont(Font.font(24)); textNode.setFill(Color.WHITE); setViewFromNode(textNode); setAlignment(Pos.CENTER); addComponent(new SceneSwitchComponent(targetScene)); } } ``` 这个实体包含一个用于显示文本的 `Text` 节点,并且添加了一个 `SceneSwitchComponent` 组件。创建实体时需要传入两个参数,分别是文本内容和目标场景名称。 最后,在游戏场景中添加这个 `Button` 实体,代码如下: ```java import com.almasb.fxgl.app.scene.GameScene; import com.almasb.fxgl.entity.Entity; import com.almasb.fxgl.entity.Entities; public class MyGameScene extends GameScene { public MyGameScene() { Entity button = Entities.builder() .at(400, 300) .viewFromNode(new Button("跳转到场景2", "scene2")) .build(); addEntities(button); } } ``` 这里创建了一个名为 `MyGameScene` 的游戏场景,并且添加了一个 `Button` 实体。当用户点击这个实体时,就会自动跳转到名为 `scene2` 的场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值