首页 > 解决方案 > 对于全局变量,我可以使用什么替代方法代替 window[]

问题描述

目前,我拥有的现有代码正在使用
window['heatMapStartDate'] = "@Model.HeatMapStartDate.ToString("yyyy-MM-dd")
and
window['heatMapEndDate'] = "@Model.HeatMapEndDate.ToString("yyyy-MM-dd")

我想删除这些,因为我无法在打字稿文件上检查它们的引用。我正在寻找一种在 .cs 文件而不是 .cshtml 文件上使用它们的方法。任何建议将不胜感激。

主页.ts

const myApp = new Vue({
    el: '#dashboard',
    data: {
        heatMapStartDate: (window as any).heatMapStartDate as string,
        heatMapEndDate: (window as any).heatMapEndDate as string,
    },
    methods: {
         ...
    },
});

索引.cshtml

@page
@model JorgeApp.Pages.Dashboard.Home.IndexModel

<div id="dashboard">
    ...
</div>

<script>
    window['heatMapStartDate'] = "@Model.HeatMapStartDate.ToString("yyyy-MM-dd")";
    window['heatMapEndDate'] = "@Model.HeatMapEndDate.ToString("yyyy-MM-dd")";
</script>

索引.cshtml.cs

namespace JorgeApp.Pages.Dashboard.Home
{
    public class IndexModel : Models.PageModels.DashboardModel
    {
        ...

        public DateTime HeatMapStartDate { get; set; }
        public DateTime HeatMapEndDate { get; set; }

        ...

        public ActionResult OnGet()
        {  

            HeatMapEndDate = DateTime.UtcNow.Date.AddDays(-1);
            HeatMapStartDate = HeatMapEndDate.AddDays(-7);

            return Page();
        }
    }
}

标签: javascriptc#htmltypescriptvue.js

解决方案


您可以尝试浏览器本地存储在特定域上全局存储数据,或者您可以使用浏览器会话存储在特定会话(浏览器选项卡会话)上全局存储数据。

localstorage['heatMapStartDate'] = "@Model.HeatMapStartDate.ToString("yyyy-MM-dd")";

或者

sessionStorage['heatMapStartDate'] = "@Model.HeatMapStartDate.ToString("yyyy-MM-dd")";

并且您可以通过以下方式访问这些数据;

data: { heatMapStartDate: localstorage['heatMapStartDate'] as string }

或者

data: { heatMapStartDate: sessionStorage['heatMapStartDate'] as string }


推荐阅读