Sometime we want to reuse our Blazor components in another apps, the best way to do this is to create a razor library, this process of create a razor library is not different from create a normal class library to share code. There is only one exception, razor components might need to reference JavaScript or CSS files. This problem can be easily solve in 2 steps as shown below.
1) Create a class that inherits from TagHelperComponent,,this class should include the tags that you want to include in the html header section of your app
using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Razor.TagHelpers; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyBlazorApp { [HtmlTargetElement("head")] public class MyTagHelper: TagHelperComponent { private string Tags= @" <!-- ZXingBlazor --> <script src=""_content/ZXingBlazor/lib/barcodereader/zxing.js""></script> <script src = ""_content/ZXingBlazor/lib/barcodereader/barcode.js"" ></ script > < !--ZXingBlazor-- > < !--Signature Pad --> <script src = ""_content/Mobsites.Blazor.SignaturePad/bundle.js"" ></ script > < link href=""_content/Mobsites.Blazor.SignaturePad/bundle.css"" rel=""stylesheet"" /> < link href=""_content/Ultra.PropertyEditors.Module.Blazor/js/signaturepropertyeditor.js""/> <!-- Signature Pad --> <!-- HTML Editor --> <link href = ""//cdn.quilljs.com/1.3.6/quill.snow.css"" rel=""stylesheet""> <link href = ""//cdn.quilljs.com/1.3.6/quill.bubble.css"" rel=""stylesheet""> <script src = ""https://cdn.quilljs.com/1.3.6/quill.js"" ></ script > <script src=""_content/Blazored.TextEditor/quill-blot-formatter.min.js""></script> <script src = ""_content/Blazored.TextEditor/Blazored-BlazorQuill.js"" ></ script > < !--HTML Editor --> "; public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { if (string.Equals(context.TagName, "head", StringComparison.OrdinalIgnoreCase)) { output.PostContent.AppendHtml(Tags).AppendLine(); } return Task.CompletedTask; } } }
*Note: to reference JavaScript or CSS from any razor library you can use the following syntax,please notice the doble quotes.
<script src=""_content/MyAssemblyName/PathToMyJavaScript/MyJavaScriptFile.js""></script>
2) Create an extension method in the “Microsoft.Extensions.DependencyInjection” namespace so you can easily add your tag helper to the service collection
using Microsoft.AspNetCore.Razor.TagHelpers; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Microsoft.Extensions.DependencyInjection { public static class StartupExtensions { public static IServiceCollection AddMyHtmlTags(this IServiceCollection services) { services.AddTransient<ITagHelperComponent, MyTagHelper>(); return services; } } }
Here is an example on how to use your new extension in your startup class
public void ConfigureServices(IServiceCollection services { services.AddMyHtmlTags(); }