web-dev-qa-db-ja.com

Uncaught TypeError:angular.lowercaseは関数ではありません

Uncaught TypeError:angular.lowercaseは関数ではありません

私のangularjsアプリケーションでこのエラーが発生し、アプリケーション全体が実行されていません。これはtextAngular-sanitize.js:413で表示されます。

デバッグできないため、angular.jsと同じバージョンを使用しようとしましたが、成功しませんでした。これに対する解決策を提供してください。コンソールでこのエラーメッセージ以外に共有するものはありません。

textAngular-sanitize.js:413 Uncaught TypeError: angular.lowercase is not a function
        at parseEndTag (textAngular-sanitize.js:413)
        at htmlParser (textAngular-sanitize.js:378)
        at textAngular-sanitize.js:147
        at textAngularSetup.js:443
        at Object.invoke (angular.js:5093)
        at angular.js:4892
        at forEach (angular.js:374)
        at createInjector (angular.js:4892)
        at doBootstrap (angular.js:1923)
        at bootstrap (angular.js:1944)
19

ご覧のとおり、 here 、angularはlowercase utilメソッドを廃止しました。

使用するライブラリはまだ更新されていないため、1.6.7より前のangularバージョンとのみ互換性があります。ただし、このエラーが発生するため、使用するangularバージョンの方がおそらく高いでしょう。

あなたはどちらか

(A)bower.jsonでangularを1.6.7にダウングレードします:

"dependencies": {
   "angular": "1.6.7",
   ...
}
"resolutions": {
   "angular": "1.6.7"
}

(B)これらのメソッドを追加して、簡単な回避策を作成します:

angular.lowercase = text => text.toLowerCase();

これはangularが読み込まれた後、アプリが起動する前に行われるようにしてください。

27
Ovidiu Dolha

Angular 1.7。*にはまだ小文字の機能がありますが、名前は$$ lowercaseに変更されました。これは可能な回避策です。 バイヤーはAngularドキュメントに基づいて注意してください

angular.module('MyApp').config(function() {
  angular.lowercase = angular.$$lowercase;  
});
7

Ovidiu Dolhaの答えは私をほとんどそこに連れて行ってくれました。 lowercase関数の廃止予定の実装を見ると、もう少しです。このshim実装は、私のためにトリックを行いました:

/**
 * @brief Shim for textAngular in order to make it compatible with the latest 
 *   version of angularjs
 */

function lowercase(string) {
  return (typeof string === 'string') ? string.toLowerCase() : string;
}

// Angular deprecated the lowercase function as of v1.6.7. TextAngular hasn't 
// updated to reflect this
angular.lowercase = lowercase;
3
Matt McCann

私のように苦労している他の人々を助けるために私の意見を共有したいと思います、主な問題はangularJSがライブラリから小文字と大文字の関数を公式に削除し、textAngular-sanitize.jsを使用している人々がtextangularこの問題を解決するライブラリにこのメソッドがまだあります。

プロジェクトからtextAngular-sanitize.jsを削除するか、以下のように、angular.moduleがロードされる前にapp.jsにOvidiu Dolhaコードを含めることができます。

angular.uppercase=function(text){
 return text.toUpperCase();
 }
 angular.lowercase=function(text){
 return text.toLowerCase();
 }

angular.module('sampleApp', ....)

Ovidiu Dolhaが提供するコード

angular.lowercase = text => text.toLowerCase();

として書くことができます

angular.lowercase=function(text){
     return text.toLowerCase();
     }

両方とも機能します。ありがとうございました。

2

angular 1.7.5に更新したときに同様の問題が見つかりました。私の解決策は、角度サニタイズを更新することで、問題は修正されました。 angular-sanitize

1

AngularJS v1.7.5を使用しています。私のコントローラーでは、以下のコードを使用して文字列を小文字に変換しました。

function myCtrl($scope, $filter)
{
    var sampleText = "THIS IS TEST";
    var test = $filter('lowercase')(sampleText);
}

コントローラに$ filterを挿入し、同じものを使用して小文字に変換します。

0
Tapash

別の適切なソリューションは、textAngularをtestAngularJsで suggested として置き換えることです。

npm install textangularjs

0
Lunin Roman

typeScriptとリンター(私の場合はtslint + standard)でangularjsを使用している場合、正しい回避策は次のとおりです。

if (!angular.lowercase) (angular as any).lowercase = (text: string) => angular.isString(text) ? text.toLowerCase() : text
0
Gullfaxi171