visual-studio-2019 - Blazor 应用程序中的结构,为什么我不能拥有一个?
问题描述
因此,我使用dotnet new blazorserver
. 在 VS 中打开解决方案并运行它。
美好的。
如果我添加一个新文件夹,比如说Components
并在该文件夹中添加一个新的 Razor 组件Component1.razor
- 然后在我的index.razor
页面中添加一个 using 语句以指向我的Components
文件夹和标记以包含组件本身并运行应用程序,即索引页面显示,但没有我的组件的迹象。进一步查看呈现的 HTML 的源代码,我看到一个空元素<component1></component1>
如果我将新组件移动到Pages
文件夹并重新运行应用程序,则组件会正确呈现。
如果我在下创建一个子文件夹Pages
并将我的组件移动到那里并重新运行应用程序,则该组件无法呈现。
难道我做错了什么?我期待太多了吗?我是否应该能够拥有一个结构,这意味着我不必将每个组件都放在一个文件夹中?
解决方案
我认为您错过了_Imports.razor
. 您可以将页面放置在该@page ""
属性可以找到的任何位置。如果您希望您的组件可用,请通过 引用其文件夹_Imports.razor
或使用@namespace
属性/指令将名称空间从其所在的文件夹覆盖到另一个正在导入的文件夹中。这里没有什么特别的事情发生。该模板在“共享”文件夹中放置了一条 using 语句。这就是为什么App.razor
在根文件夹中可以访问它们。
示例_Imports.razor
(来自名称/默认命名空间的项目PolymorphicApi)
...
@using PolymorphicApi
@using PolymorphicApi.Shared
如果您不想使用_Imports.razor
,您可能不想让所有组件都可用。您可以@namespace
在组件中使用。这与覆盖.cs
文件中的默认命名空间相同。
例子 :
@namespace PolymorphicApi
使用此语句的组件可以位于任何子文件夹中,并且在已导入根命名空间时可用。
附带说明:_Imports.razor
可以将其视为一大块 razor 语句,这些语句将被导入到该文件夹下的所有 razor 组件中。您不必仅将其用于命名空间。例如,您可以使用@inject 语句。默认情况下,我这样做是为了在每个组件中进行本地化。
推荐阅读
- java - 运行 JMXConnectorFactory.connect 时 JMX 连接不重播
- c++ - 当具有相同值的多个值是 std::vector 的一部分时,std::distance 的计算如何工作
- python - 使用 vaex 从 CSV 转换为 HDF5 时保留日期时间类型
- flutter - Fluter web Navigator 前进按钮
- extjs - 如何在 ExtJs 的标签栏中动态添加 tbar
- pyspark - pyspark 数据框中的正则表达式
- javascript - 为什么我会在我的代码中获得与“不存在”的方法相关的这些错误?
- reactjs - 来自ajax的反应选择选项数据
- android - 在 Flutter 列中拆分子数组
- javascript - 如何将数组组转换为 Json?