我可以用什么替代方法代替window []作为全局变量

时间:2020-02-05 18:43:08

标签: javascript c# html typescript vue.js

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

window['heatMapEndDate'] = "@Model.HeatMapEndDate.ToString("yyyy-MM-dd")

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

home.ts

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

Index.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>

Index.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();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您可以尝试使用浏览器 localstorage 在特定域上全局存储数据,也可以使用浏览器 sessionstorage 在特定会话(浏览器标签会话)上全局存储数据。 / p>

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

OR

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

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

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

OR

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

答案 1 :(得分:0)

您可以使用TypeScript声明文件(例如global.d.ts)在窗口对象上声明其他属性:

declare global {
    interface Window { 
        heatMapStartDate: string;
        heatMapEndDate: string;
    }
}

然后您可以像这样使用它们:

window.heatMapStartDate = "@Model.HeatMapStartDate.ToString("yyyy-MM-dd")";
window.heatMapStartDate = "@Model.HeatMapEndDate.ToString("yyyy-MM-dd")";