angularJS 报错: [ngModel:numfmt] http://errors.angularjs.org/1.4.1/ngModel/numfmt?p0=333

本文探讨了在AngularJS中使用自定义指令时遇到的大小写敏感问题,特别是当指令名采用驼峰命名法时,HTML解析会自动转换为小写,导致指令识别错误。文章通过实例展示了如何正确调用指令避免此类错误。
部署运行你感兴趣的模型镜像
<!doctype html>
<html ng-app="a10086">
<head>
    <meta charset="utf-8">
    <script src="angular.min.js"></script>
</head>
<body>

<pre>
stringToNumber2 指令中这么写没问题,
但是html中调用也这么写,html解析会自动将标签和标签属性专为小写,即stringToNumber2变成了stringtonumber2,
导致最终:Error: ngModel:numfmt Model is not of type `number`。。产生的原因:不是你指令内写错了,而是指令(驼峰书写)与html中调用的指令名称(小写)不相同
若html中调用指令改成:string-to-number2就可以了。。ng好变态。
</pre>
<div ng-controller="kkc">
 <input type="date"/>
 正确的<input type="number" string-to-number ng-model="cc.a"/> {{ cc.a }}
 错误的:<input type="number" stringToNumber2 ng-model="cc.b"/> {{ cc.b }}

</div>

</body>
</html>
<script>

angular.module('a10086',[])
.controller('kkc',function($scope){
    $scope.cc={
        a:'222',b:'333'
    }//虽然这里后台给出的a和b是字符串,但是指令会专为数字。
}).directive('stringToNumber', function() {
    return {
        require: 'ngModel',
        link: function(scope, element, attrs, ngModel) {
            ngModel.$parsers.push(function(value) {
                return '' + value;
            });
            ngModel.$formatters.push(function(value) {
                return parseInt(value);
            });
        }
    };
}).directive('stringToNumber2', function() {
    return {
        require: 'ngModel',
        link: function(scope, element, attrs, ngModel) {
            ngModel.$parsers.push(function(value) {
                return '' + value;
            });
            ngModel.$formatters.push(function(value) {
                return parseInt(value);
            });
        }
    };
});
</script>

 AngularJS v1.4.1

input type="number":原因是在ipad上需要调用数字键盘,所以需要用这个,若type="text"则是不会报错了;根据提示信息将数据
$scope.cc={
        a:'222',b:'333'
    }改成cc.a=222,cc.b=333方可不报错,但因为该数据是从后台过来的,所以需要进行处理,故使用指令解决。。
但是依然报错,后来找到原因是指令大小写的问题:stringToNumber2,而html中写为stringToNumber2,看似一样其实不一样,因为浏览器在解析页面标签属性时会将其变成小写stringtonumber2,故“333”就没有解析成功,看指令:stringToNumber,在html中调用指令使用2中方式:1为string-to-number,2指令直接小写得了。。

转载于:https://www.cnblogs.com/yuzhongwusan/p/4645670.html

您可能感兴趣的与本文相关的镜像

Facefusion

Facefusion

AI应用

FaceFusion是全新一代AI换脸工具,无需安装,一键运行,可以完成去遮挡,高清化,卡通脸一键替换,并且Nvidia/AMD等显卡全平台支持

<think>我们使用引用[1]中提到的json-schema-library,因为它支持Draft04。我们将使用这个库来验证JSON数据是否符合给定的schema(符合draft-04规范)。 步骤: 1. 安装json-schema-library(如果尚未安装) 2. 导入必要的模块 3. 定义JSON Schema(符合draft-04规范) 4. 定义要验证的JSON数据 5. 使用validate或validateAsync进行验证 6. 处理验证结果 注意:由于引用[1]提到该库支持Draft04,并且提供了validate和validateAsync方法,我们将使用这些方法。 示例代码(JavaScript): 假设我们有一个schema和要验证的数据,我们使用json-schema-library进行验证。 首先,安装库: ```bash npm install json-schema-library ``` 然后,编写验证代码: ```javascript const { Draft04 } = require('json-schema-library'); const jsonSchema = new Draft04(); // 定义符合draft-04的schema const schema = { "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer", "minimum": 0 } }, "required": ["name"] }; // 要验证的数据 const data = { "name": "Alice", "age": 30 }; // 同步验证 const errors = jsonSchema.validate(schema, data); if (errors.length === 0) { console.log("数据有效!"); } else { console.log("数据无效,错误详情:", errors); } // 异步验证(如果需要) // jsonSchema.validateAsync(schema, data).then((errors) => { // if (errors.length === 0) { // console.log("数据有效!"); // } else { // console.log("数据无效,错误详情:", errors); // } // }); ``` 解释: - 我们创建了一个Draft04实例,它专门用于处理draft-04的schema。 - 定义了一个schema,它要求一个对象,必须包含字符串类型的name属性,以及可选的非负整数age属性。 - 使用validate方法同步验证数据,返回错误数组。如果长度为0,则数据有效。 注意:异步验证validateAsync在需要处理异步操作(如远程引用)时使用,这里我们使用同步验证作为示例。 如果验证失败,errors数组会包含详细的错误信息,每个错误对象会包含路径、消息等。 另外,引用[3]中展示了Java中使用JSON Schema进行校验的例子,但用户要求的是JavaScript环境(因为引用的库是JavaScript的),所以我们使用JavaScript示例。 如果用户需要其他语言的实现,我们可以根据情况调整,但根据引用,我们优先使用json-schema-library(JavaScript库)来实现。 因此,我们提供上述JavaScript代码作为验证符合draft-04规范的JSON数据的方法。</think>要验证符合 JSON Schema Draft-04 规范的 JSON 数据,可以使用支持该规范的库。以下是基于引用[1]推荐的 `json-schema-library` 实现的 JavaScript 解决方案: ### 步骤实现 1. **安装依赖** ```bash npm install json-schema-library ``` 2. **验证代码示例** ```javascript const { Draft04 } = require('json-schema-library'); const jsonSchema = new Draft04(); // 定义 Draft-04 规范的 Schema const schema = { "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "properties": { "name": { "type": "string" }, "age": { "type": "integer", "minimum": 0 } }, "required": ["name"] }; // 要验证的 JSON 数据 const jsonData = { "name": "Alice", "age": 30 }; // 同步验证 const errors = jsonSchema.validate(schema, jsonData); if (errors.length === 0) { console.log("✅ 数据有效"); } else { console.error("❌ 验证错误:", errors); } // 异步验证(推荐处理复杂场景) jsonSchema.validateAsync(schema, jsonData) .then(errors => { if (errors.length === 0) console.log("✅ 异步验证通过"); else console.error("❌ 异步验证错误:", errors); }); ``` ### 关键说明 1. **Draft-04 支持** `json-schema-library` 明确支持 Draft-04 规范(如引用[1]所述),确保规范兼容性[^1]。 2. **验证功能** - `validate()`:同步验证,立即返回错误数组 - `validateAsync()`:异步验证,适合远程引用等场景 - 错误对象包含详细路径和错误信息(如 `"name 必须为字符串类型"`) 3. **Java 方案参考** 如引用[3]所示,Java 可使用 `everit-org/json-schema` 库实现类似验证: ```java JSONObject schema = new JSONObject(...); // Draft-04 schema Validator validator = Validator.builder().build(); validator.performValidation(schema, jsonData); // 抛出 ValidationException ``` ### 注意事项 - 确保 Schema 的 `$schema` 字段明确指定为 `http://json-schema.org/draft-04/schema#` - 复杂嵌套对象验证参考引用[3]的嵌套结构示例[^3] - 实时表单验证场景可结合引用[2]的 React-JSON-Schema-Form 方案[^2]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值