未捕获的TypeError:angular.lowercase不是函数

时间:2018-05-21 11:54:29

标签: javascript angularjs bower angular-sanitizer

  

未捕获的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)

8 个答案:

答案 0 :(得分:24)

正如您所看到的here,angular弃用了他们的lowercase util方法。

您使用的库尚未更新,因此仅与1.6.7之前的角度版本兼容。但是,由于您收到此错误,您使用的角度版本可能更高。

你可以

(A)在你的bower.json中将角度降低到1.6.7:

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

(B)通过添加这些方法创建一个简单的解决方法:

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

确保在加载角度后但应用程序启动之前完成此操作。

答案 1 :(得分:6)

Angular 1.7。*仍然具有小写功能,但已重命名为$$ lowercase。这是一个可能的解决方法。 Buyer beware based on Angular documentation

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

答案 2 :(得分:3)

Ovidiu Dolha的回答使我快到了。如果您看一下lowercase函数的折旧前实现,那还不止如此。这个填充程序实现了我的窍门:

/**
 * @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 :(得分:1)

我想分享我的观点,以便它能帮助像我一样苦苦挣扎的其他人,主要问题是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();
     }

两者都有效。谢谢。

答案 4 :(得分:1)

在更新为angular 1.7.5时,我发现了一个类似的问题,我的解决方案是更新angular-sanitize,并且此问题已解决。 angular-sanitize

答案 5 :(得分:0)

如果您使用的是带有typescript和linter的angularjs(在我的情况下为tslint + standard),则正确的解决方法是:

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

答案 6 :(得分:0)

另一种合适的解决方案是在此处用suggested的testAngularJs替换textAngular。

npm install textangularjs

答案 7 :(得分:0)

我正在使用 AngularJS v1.7.5 。在我的控制器中,我使用下面的代码将字符串转换为小写字母:

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

在控制器中注入 $ filter 并使用其转换为小写字母。