`
v7sky
  • 浏览: 76521 次
文章分类
社区版块
存档分类
最新评论

【AngularJS系列】formly-form 定制输入栏

阅读更多
背景:H5页采用formly-form组件,JS定义数据绑定,某元素需要定制输入样式,比如说范围输入

上菜:
一、H5页面
<!DOCTYPE html>
<html ng-app="indexApp">
<head>
    <meta charset="UTF-8">
    <title>webapp</title>

    <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css">
</head>
<body>
<!-- 这里采用了controller as语法 -->
<div ng-controller ="appCtrl as vm">

    <form ng-submit="vm.onSubmit()">

        <formly-form model="vm.user" fields="vm.userFields">
            <button type="submit">Submit</button>
        </formly-form>
    </form>

    <pre>
        {{vm.user}}
    </pre>
</div>

<!-- formly 必备组件 -->
<script src="bower_components/api-check/dist/api-check.js"></script>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-formly/dist/formly.js"></script>
<script src="bower_components/angular-formly-templates-bootstrap/dist/angular-formly-templates-bootstrap.js"></script>

<!-- 引入区域框 -->
<script src="comp/rangeInput.js"></script>

<script src="demo_formly.js"></script>

</body>
</html>


二、demo_formly.js
var module = angular.module('indexApp',
    [
        'formly',
        'formlyBootstrap',

        'rangeinput'
    ]
);

module.controller('appCtrl', function ($scope) {
    var vm = this; // vm stands for "View Model" --> see https://github.com/johnpapa/angular-styleguide#controlleras-with-vm
    vm.user = {
        username:"pet",
        password:"12345",
    };

    vm.userFields = [
        {
            // the key to be used in the model values
            // so this will be bound to vm.user.username
            key: 'username',
            type: 'input',
            templateOptions: {
                label: 'Username',
                placeholder: 'johndoe',
                required: true,
                description: 'Descriptive text'
            }
        },
        {
            key: 'password',
            type: 'input',
            templateOptions: {
                type: 'password',
                label: 'Password',
                required: true
            },
            expressionProperties: {
                'templateOptions.disabled': '!model.username' // disabled when username is blank
            }
        },
        {
            key:'pay_cnt_30',
            //注意这里ng-model绑定属性的写法
            template: '<span>30天支付订单</span><range-input ng-model="model[options.key]"></range-input>'
        }
    ];

    vm.onSubmit = onSubmit;

    function onSubmit() {
        console.log('form submitted:', vm.user);
    }

    <!-- 也可以直接在$scope上定义方法,html上调用时,直接用onSubmit()即可 -->
    $scope.onSubmit = function () {
        console.log('form submitted:', vm.user);
    }

    console.log(vm);
    console.log($scope);
});



三、pay_cnt_30属性采用自定义H5模板,内含定制directive
angular.module('rangeinput',[])

.directive('rangeInput',function () {
    return{
        restrict : 'E',
        templateUrl : 'comp/rangeInput.html',
        scope:{
            rangeValue : '=ngModel' //注意这里将rangeValue绑定到attr上名为ngModel的属性
        },
        link:function (scope,element,attrs) {

            scope.range = {
                min: 0,
                max: null
            };

            //观察的也是绑定的attr属性名,要带引号
            attrs.$observe('ngModel', function (value) {
                if (scope.rangeValue != null) {
                    var target = scope.rangeValue.split(",");
                    scope.min = target[0];
                    scope.max = target[1];
                }
            });

            //$watch的对象为scope上的对象,且要带引号
            scope.$watch('range',function(newValue,oldValue) {
                var min = scope.range.min==null? "0" : scope.range.min;
                var max = scope.range.max==null? "*" : scope.range.max;

                if(max!="*" && min > max){
                    scope.range.min = max;
                }

                scope.rangeValue = min+","+max;
            },true);
        }
    }
});


四、directive的H5模板

<div style="display: inline">
    <input ng-model="range.min" type="number">
</div>
<div style="display: inline">
    <span>-</span>
</div>
<div style="display: inline">
    <input type="number" ng-model="range.max">
</div>

0
0
分享到:
评论

相关推荐

    Formly-form:应用正式使用Angular

    标题"Formly-form:应用正式使用Angular"表明我们将讨论一个名为"Formly-form"的项目或库,它与Angular框架的实战应用有关。Angular是一款流行的前端开发框架,由Google维护,用于构建动态、高性能的Web应用程序。而...

    angularjs-form-builder, 使用AngularJS编写的简单窗体生成器应用程序.zip

    angularjs-form-builder, 使用AngularJS编写的简单窗体生成器应用程序 angularjs-form-builder用AngularJS编写的简单表单生成器应用程序。 它使用自定义指令。有关项目和功能的完整概述,请参见 ...

    源码解析之rc-field-form解读与实现

    - **Field**: `rc-field-form`中的基本单位,它封装了输入组件,负责状态管理和验证。 - **Form**: 表单容器,用于管理多个Field,提供表单级的提交、重置等操作,并处理验证逻辑。 - **Rules**: 验证规则,可以...

    feign-form-spring-3.8.0-API文档-中文版.zip

    赠送jar包:feign-form-spring-3.8.0.jar; 赠送原API文档:feign-form-spring-3.8.0-javadoc.jar; 赠送源代码:feign-form-spring-3.8.0-sources.jar; 赠送Maven依赖信息文件:feign-form-spring-3.8.0.pom; ...

    关于applicationx-www-form-urlencoded等字符编码的解释说明

    multipart/form-data是另一种常用的编码格式,它将窗体数据编码为一条消息,页上的每个控件对应消息中的一个部分。这种编码格式可以上传文件,并且可以处理复杂的数据结构。 在实际开发中,我们需要根据具体情况...

    feign-form-3.8.0-API文档-中文版.zip

    赠送jar包:feign-form-3.8.0.jar; 赠送原API文档:feign-form-3.8.0-javadoc.jar; 赠送源代码:feign-form-3.8.0-sources.jar; 赠送Maven依赖信息文件:feign-form-3.8.0.pom; 包含翻译后的API文档:feign-form...

    angularjs-form-to-google-sheets

    AngularJS表单示例 该存储库包含由AngularJS支持的虚拟联系表单。 可以在查看实际运行情况 上有此表单的分步教程。 安装 只需将此存储库克隆到可从本地Web服务器访问的目录中即可。...angularjs-form-to-google-sheets

    formly-builder:用于formly-js的拖放式表单创建的构建器应用程序,该应用程序输出表单所需的JSON

    在实际应用中,formly-builder通常与AngularJS框架结合使用,因为formly-js最初是为AngularJS设计的。然而,随着技术的发展,formly-js也逐渐支持了其他前端框架,如Angular(新版本)和React。因此,formly-builder...

    k-form-design表单设计器 v3.8.18.zip

    其次,作为一款源码开放的工具,"k-form-design"允许开发者深入定制其内部逻辑和外观样式,以满足特定项目的需求。你可以根据自己的毕业设计论文主题,分析并改进其现有的功能,甚至扩展出新的功能模块。这对于提升...

    AngularJS使用angular-formly进行表单验证

    在AngularJS中,表单验证是确保用户输入数据正确性和安全性的关键步骤。Angular-formly是一个强大的库,它简化了创建动态和复杂的AngularJS表单的过程,包括验证。本篇文章将深入探讨如何使用angular-formly进行表单...

    lit-formly-form:用LitElement实现Angular Formly

    使用Web组件(lit-element)实现Angular Formly 安装 npm i lit-formly-forms lit-html lit-element 表格定义 首先,您必须定义Formly指定的表单字段: const config = [ { id : "1" , key : "name" , type : ...

    vue-ele-form源码

    在`vue-ele-form-master`这个压缩包中,我们通常会找到以下文件和目录: - `src`:源代码目录,包含组件的主要实现,如`index.vue`是vue-ele-form的主要入口文件。 - `examples`:示例代码,用于展示如何在项目中...

    angular-formly-json-schema:angular-formly 的插件,允许您将 json-schema 传递给 formly 而不是 formly 的自定义配置

    如果你的项目使用的是 AngularJS 1.x,确保 `angular-formly` 已经安装。 2. **引入依赖**:在你的应用模块中,注入 `formlyJsonschema` 模块作为依赖。例如: ```javascript var app = angular.module('myApp', ...

    提交multipart/x-www-form-urlencoded类型数据

    1.SendNotification.jsp:发送通知页面,表单提交数据的类型为multipart/x-www-form-urlencoded 2.RecvNotification.jsp:接收通知页面 3.页面简单使用了Bootstrap样式 4.开发工具使用IDEA

    前端项目-angular-formly.zip

    **AngularJS与Angular-Formly** AngularJS,是由Google维护的JavaScript框架,主要用于构建动态Web应用。它通过双向数据绑定、依赖注入和模块化等特性,简化了前端开发流程,提高了开发效率。AngularJS的核心是MVC...

    feign-form-spring-3.8.0-API文档-中英对照版.zip

    赠送jar包:feign-form-spring-3.8.0.jar; 赠送原API文档:feign-form-spring-3.8.0-javadoc.jar; 赠送源代码:feign-form-spring-3.8.0-sources.jar; 赠送Maven依赖信息文件:feign-form-spring-3.8.0.pom; ...

    formly-car-rental:Scotch.io 上的 Angular-Formly 教程代码

    1. **Angular-Formly 基础**:Angular-Formly 包括一个服务(`formly`)和一组指令(如 `formly-form` 和 `formly-field`),这些组件协同工作,根据配置的 JSON 数据生成表单。JSON 数据定义了表单字段的类型、属性...

    微信小程序表单自定义组件vest-form-master.zip

    vest-form-master.zip 文件包含的项目是一个完整的 vest-form 框架的源码仓库。这个框架的核心特点是其自定义组件功能,这使得开发者能够根据实际需求定制自己的表单组件,以满足各种复杂场景下的表单验证和处理。 ...

    angular-schema-form-strap-datetimepicker:使用 angular-strap 实现的 angular-schema-form 的日期和时间选择器

    总结起来,“angular-schema-form-strap-datetimepicker”是AngularJS开发中的一个强大工具,它结合了Angular Schema Form的动态表单能力和Angular Strap的日期时间选择器,提供了高效、灵活的日期和时间输入方式。...

    Ads-AngularJS-Practical-Project

    本项目“广告-AngularJS-实用-项目”旨在通过实践帮助开发者深入理解AngularJS的核心概念和实际应用。 首先,AngularJS的核心特性包括双向数据绑定、依赖注入、模块化以及指令系统。在本项目中,你会了解到如何利用...

Global site tag (gtag.js) - Google Analytics