31

未捕获的类型错误: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)
4

8 回答 8

37

正如你在这里看到的,angular 弃用了他们的lowercaseutil 方法。

您使用的库尚未更新,因此仅与 1.6.7 之前的 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 之后但在您的应用程序启动之前完成此操作。

于 2018-05-21T12:02:16.073 回答
21

Angular 1.7.* 仍然具有小写功能,但已重命名为 $$lowercase。这是一种可能的解决方法。买家要小心基于 Angular 文档

angular.module('MyApp').config(function() {
  angular.lowercase = angular.$$lowercase;  
});
于 2018-07-27T18:29:40.553 回答
5

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

两者都会起作用。谢谢你。

于 2018-06-06T06:43:11.213 回答
4

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;
于 2018-09-23T09:16:38.993 回答
3

另一个合适的解决方案将被替换textAngulartestAngularJs这里建议的。

npm install textangularjs

于 2018-10-05T09:24:19.023 回答
2

我在更新到 angular 1.7.5 时发现了类似的问题,我的解决方案是更新 angular-sanitize 并且问题已解决。 角度消毒

于 2018-11-10T17:02:50.550 回答
0

如果您将 angularjs 与 typescript 和 linter(在我的情况下为 tslint + 标准)一起使用,则正确的解决方法是:

if (!angular.lowercase) (angular as any).lowercase = (text: string) => angular.isString(text) ? text.toLowerCase() : text
于 2018-06-29T11:50:51.623 回答
0

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

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

在控制器中注入$filter并使用它来转换为小写。

于 2019-01-03T19:49:39.693 回答