aurelia验证属性表达式需要帮助

时间:2017-01-12 05:14:33

标签: validation properties aurelia

我正在尝试将单个aurelia验证与表单中的一组属性进行匹配。例如。在映射到表中的行的对象数组中具有属性名称ssid的每个字段。验证文档说,ensure子句可以有一个property expression,听起来就像我需要的那样。我正在使用

中的验证

{ValidationRules, ValidationController} from 'aurelia-validation';

我已经使用

为单个属性进行了验证

ValidationRules.ensure('apPwd').displayName('XY AP Password').maxLength(32).minLength(8).on(this);

其中apPwd是属性表达式。

但我无法找到任何属性表达式的规范。 aurelia docs中的大多数示例只显示一个属性名称。我见过的最复杂的事情是与|&(无论是什么)一起传输的东西。

有人能指出我的具体问题的规格或帮助吗?或者也许我应该放弃这个包并滚动我自己的代码?

2 个答案:

答案 0 :(得分:0)

我认为这可以帮到你:

这是validate.ts

import { autoinject } from 'aurelia-framework';
import { ValidationRules, ValidationController } from 'aurelia-validation';

@autoinject
export class Validate {
    numberField: number;

    controller: any;

    constructor (
        private validationController: ValidationController
    ) {
        this.controller = validationController;

        ValidationRules.customRule(
            'nummer',
                (value, obj, min, max) => {
                    let numberValue: number = parseInt(value);
                    return value === null || value === undefined || Number.isInteger(nummer) && nummer >= min && nummer <= max;
                },
                `\${$displayName} must be an integer between \${$config.min} and \${$config.max}.`,
                (min, max) => ({ min, max })
            );

        ValidationRules
            .ensure((m: this) => m.numberField)
                .required()
                .withMessage('Rutan får inte vara tom.')
                .satisfiesRule('nummer', 1, 100)
                /*.satisfies((value: any, object?: any) => {
                    console.log(value);
                    if (value >= 1 && value <= 100) {
                        return true;
                    }
                    else {
                        return false;
                    }
                })
                .withMessage(`The number must be between  - 100.`)*/
            .ensure((m: this) => m.numberField).required()
            .on(this);
    }

    submit(): void {
        this.executeValidation();
    }

    executeValidation(): void {
        this.controller.validate()
        .then(errors => {
            if (errors.length === 0) {
                console.log('all good!');
            } else {
                console.log('all errors!');
            }
        });
    }

}

这是validate.pug(在我的情况下,如果你愿意,你可以使用html页面)

template
    section.au-animate
        h2 Validate

        form(role="form")
            .form-group
                label Number
                input#meetingSubject.form-control(type="text" value.bind="numberField & validate")

            button.btn.btn-lg.btn-primary(click.delegate='submit()') Validate
        div
            h3 ${'latestValidationResult'}
            ul(if.bind='controller.errors.length')
                li(repeat.for='error of controller.errors') ${error.message}

答案 1 :(得分:0)

不确定我是否理解了您的问题,但我认为您正在寻找ensureObject

ValidationRules
  .ensureObject()
    .satisfies(obj => {
       return obj.property1 === 'test' && obj.property2.indexOf('test2') !== -1
    })
    .withMessage('Some error message.')
  .on(this);