【发布时间】:2020-09-20 04:10:37
【问题描述】:
我正在使用 AngularJS 和 Bootstrap 4 Accordion。手风琴中的每张卡片都将显示“系统信息”,包括版本号(来自 systemData 对象数组的 ng-repeat)。我的应用程序设置为将系统版本存储为 text/varchar (postgres DB),因为版本号中可能有多个小数(例如 6.3.1、7.1.10 等)
如果版本字符串中的第一个字符是“8”,我已经在 Angular JS 控制器中创建了一个 JS 函数来显示特定图像。但是,浏览器似乎将参数作为数字发送,这会导致 JS 函数在版本超过 1 个小数点时失败,因为它接收的参数是“NaN”。
这是我的 HTML:
<!-- Accordion-->
<div class="container">
<div id="allSystemsAccordion">
<div class="card" ng-repeat="system in systemData track by $index">
<div class="card-header" data-toggle="collapse" data-target="#systemsAccordionCollapse{{$index}}">
<img ng-show="isVersionEight({{system.version}})" ng-src="./images/logo.png" alt="logo" style="width:30px; border-radius:50%">
<a>{{system.version}}</a>
</div>
<div id="systemsAccordionCollapse{{$index}}" class="collapse" data-parent="#allSystemsAccordion">
<div class="card-body">
<a class="text-secondary">Version: </a><strong>{{system.version}}</strong><br>
<a class="text-secondary">Owner: </a><strong>{{system.owner}}</strong><br>
<a class="text-secondary">URL: </a><strong>{{system.url}}</strong><br>
</div>
</div>
</div>
</div>
JS 函数(在角度控制器内)
$scope.isVersionEight = function(version) {
//actual logic will go here, but below is console statements for debugging for now.
console.log("FUNCTION VERSION AND TYPE: " + version + " " + typeof version + " toString(): " + version.toString() + " " + typeof version.toString());
};
请注意,在包含版本的图像标签下方的锚标签中,以及卡片正文中列出的版本,无论存在多少小数,都可以在 UI 上正常显示。此外,如果我在控制台中打印 systemData (JSON) 的内容,我可以看到用引号括起来的版本值,这让我相信客户端正在按预期从服务器接收字符串,并将其设置为那种。
这是 systemData 中对象的屏幕截图示例:
这是函数运行时控制台输出的屏幕截图:
为什么 system.version 值似乎只在这个函数参数中被读取为数字?在它到达我的函数之前,我怎样才能让它成为一个字符串?我知道我可以在我的函数中执行 toString() ,但这没有帮助,因为我的函数的参数已经是“NaN”。
【问题讨论】:
标签: javascript angularjs bootstrap-4