[英]Why does AngularJs or javascript convert a 4 digit string as a date
我正在使用angularJs
並且有一個字段作為varchar(10)
存儲在MSSQL
中。 只要數據不是像1234
這樣的 4 個字符的數字,就會正確存儲和顯示數據。
當我保存該字符串時,db 的正確值為1234
,但是當它顯示在 UI 中時,它看起來像一個日期: "1234-01-01T00:00:00.000Z"
html 使用{{project.PurchaseOrderNumber}}
來呈現數據。
angularJs
代碼:
projectService.getProjects().then(function (response) {
$scope.projects = response.data;
$scope.loading = false;
}, function() {
messageService.showError("Failed to get projects. Please refresh and try again");
});
service.getProjects = function() {
return $http.get(baseUrl + 'API/Projects/');
};
C#
代碼:
[Route("")]
public List<Project> GetProjects()
{
return _projectService.GetProjects(_companyId.ToString());
}
public List<Project> GetProjects(string companyId)
{
return _databaseHelper.QueryProc<Project>("projects_get", new { companyId }).ToList();
}
public class Project
{
public Guid Id { get; set; }
public Guid CompanyId { get; set; }
public string Status { get; set; }
public string PurchaseOrderNumber { get; set; }
}
JSON
字符串作為響應的一部分:
[{
"Id": "daef5b27-fb8c-4804-a407-0165e17c3a60",
"CompanyId": "76bca824-6e93-45a5-bc5a-ba20d030ebce",
"Status": "New",
"PurchaseOrderNumber": "1234-01-01T00:00:00.000Z"
}, {
"Id": "09d87946-dec2-4721-bf71-df436919b599",
"CompanyId": "76bca824-6e93-45a5-bc5a-ba20d030ebce",
"Status": "New",
"PurchaseOrderNumber": "160728"
}]
MSSQL
代碼:
SELECT [id]
,[companyId]
,[status]
,[purchaseOrderNumber]
FROM [dbo].[projects]
我已經確認在GetProjects
返回結果之前, purchaseOrderNumber
仍然是1234
。 然而,當我打破$scope.projects = response.data;
它是日期格式。
更新
我剛剛檢查了 Chrome 中的網絡選項卡,看到數據實際上是正確的格式,但是當它提供給response.data
它不是。
4:{Id: "daef5b27-fb8c-4804-a407-0165e17c3a60", CompanyId: "76bca824-6e93-45a5-bc5a-ba20d030ebce",…}
CompanyId:"76bca824-6e93-45a5-bc5a-ba20d030ebce"
Id:"daef5b27-fb8c-4804-a407-0165e17c3a60"
PurchaseOrderNumber:"1234"
Status:"New"
更新 2
我了解到這發生在任何領域。 如果它只包含 4 位數字(任何 4 位數字,以任何順序),則在提供給angularJs
時將其呈現為日期
為什么 angular 會這樣做? 我該如何阻止?
也許您使用的輸入是 type="date" ?
您可以打印變量,因為它是這樣存儲的:
{{project.PurchaseOrderNumber|raw}}
Angularjs 在 JSON eval 之前刪除響應數據行
請參閱上面的解決方案,在您的情況下,transformRespose 將是
{
transformResponse : []
}
現在,一旦將 transformResponse 設置為 null,成功回調將是原始 json 而不是像 angularjs 中通常的對象。
如果您將 JSON 字符串解析為 json 對象並將日期字符串轉換為日期對象,則需要忽略 4 個字符值對象以轉換為日期對象
更新
我猜在你的角度數據服務或控制器的某個地方你正在將 json 字符串解析為 JSON 對象,並且有一個邏輯可以將日期字符串轉換為寫在那里的日期對象。 該邏輯將具有 ISODate 的 REGEX,因此您只需要改進該邏輯即可不考慮 4 位字符串來匹配 Regx。
我有完全相同的問題。 就我而言,我通過 JSON 將數據作為number
發送到前端,然后 angular 將其解釋為日期。 通過將值更改為string
我能夠使其正常工作。
但在你的情況下,也許可以用另一種方式嘗試它?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.