【问题标题】:How to fix AngularJS passing string value as number in JS function parameter如何修复AngularJS在JS函数参数中将字符串值作为数字传递
【发布时间】: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


    【解决方案1】:

    哇,我的分析过度了。解决方法简单得令人尴尬。 我变了: ng-show="isVersionEight({{system.version}})"

    到:

    ng-show="isVersionEight('{{system.version}}')"

    只是缺少引号!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 2020-05-01
      • 2011-05-12
      • 1970-01-01
      相关资源
      最近更新 更多