Angular TypeError: name.replace is not a function for ng-style

Angular TypeError: name.replace is not a function for ng-style

我是 angular 的新手,在控制台 TypeError: name.replace is not a function 中不断收到以下错误。我不确定到底是什么原因造成的,但它似乎是由 ng-style 语句引起的,也许与驼峰式大小写有关?

我不明白的部分是为什么 ng-style="isFrontView() || !matches && {'display': 'none'}" 会抛出错误,而 ng-style="!isFrontView() || !matches && {'display': 'none'}" 不会抛出错误。

为了补救这种情况,我尝试从函数名称中删除驼峰式命名并全部改为小写。我也尝试使用 !!isFrontView(),但似乎都没有删除错误消息。

有人知道此错误消息的原因和可能的修复方法吗?

HTML 模板:

<div class="system-view">
    <div class="controller-container fill" id="systemView1" ng-style="isFrontView() || !matches && {'display': 'none'}">
        <canvas id="canvasLayer-shell" data-layername="front" width="617" height="427"></canvas>
        <i ng-if="!matches" class="fa fa-repeat toggle-view" ng-click="changeView()" ng-touch="changeView()"></i>
    </div>
    <div class="controller-container fill" id="systemView2" ng-style="!isFrontView() || !matches && {'display': 'none'}">
        <canvas id="canvasLayer-shell" data-layername="back" width="617" height="427"></canvas>
        <i ng-if="!matches" class="fa fa-undo toggle-view" ng-click="changeView()" ng-touch="changeView()"></i>
    </div>
</div>

后端代码:

$scope.frontView = true;
$scope.matches = true;

$scope.isFrontView = function() {
   return $scope.frontView;
};

$scope.changeView = function() {
    $scope.frontView = !$scope.frontView;
};

P.S。即使出现控制台错误,一切仍能正常运行。

您的潜在问题是由于 ng-style 的不正确使用造成的。 ng-style sets a watcher on the expression and sets the element's style with the help of jquery/jqlite element.css. And Inside element.css css attribute (name) is converted to the standard camel casing (which uses regex string replace). In your specific case the expression evaluated to boolean (true) instead of an object (ng-style does this for each property) 和 boolean 没有 replace 属性(在 string 对象上可用)因此它失败了。您可以通过使用字符串连接将表达式转换为字符串来对此进行测试。

ng-style="'' + (isFrontView() || !matches && {'display': 'none'})"

查看隐藏和显示元素所需的所有表达式,您可以使用 ng-show/ng-hide 指令来实现。

这是一个迟到的答案,但我可能会帮助其他有同样问题的人,比如 me.In 我的情况错误是 a.replace 不是函数最后我找到了原因。这是由于 ng-style 而发生的,表达式是 data-ng-style="isCompare==true ? {'max-height':'423'} : ***' '*** .... 单个 qoutes 之间的 space 导致 error.After 删除 space 错误消失了。

如果表达式评估的 return 类型错误,就会发生这种情况。

评估的表达式:

ng-style="$vm.getStyles()"

必须return一个对象文字:

return { order: -1 };