私は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
_は式にウォッチャーを設定します そして jquery/jqlite _element.css
_ の助けを借りて要素のスタイルを設定します。そして、内部_element.css
_ css属性(name
)は、標準のキャメルケースに変換されます( 正規表現文字列置換を使用 )。特定のケースでは、式はオブジェクトではなくブール値(true
)に評価されます( _ng-style
_は各プロパティに対してこれを行います )およびブール値にはreplace
プロパティ(stringオブジェクトで使用可能)がないため、失敗します。文字列連結を使用して、評価する式を文字列に変換することで、これをテストできます。
つまり、ng-style="'' + (isFrontView() || !matches && {'display': 'none'})"
要素を表示および非表示にするために必要なすべての式を見ると、 _ng-show
_/_ng-hide
_ ディレクティブを使用してそれを実現できます。
これは、評価された式が間違った型を返す場合に発生する可能性があります。
評価された式:
ng-style="$vm.getStyles()"
オブジェクトリテラルを返す必要があります:
return { order: -1 };
これは遅い答えですが、私のような同じ問題を抱えている他の人を助けるかもしれません。私の場合、エラーはa.replaceは関数ではありませんであり、最終的に理由を見つけました。 ng-styleが原因で発生しており、単一のqoutes間のスペースがエラーの原因であるという式はdata-ng-style="isCompare==true ? {'max-height':'423'} : ***' '*** ....
でした。スペースを削除すると、エラーはなくなりました。