GVKun编程网logo

JS金额输入控制(js只能输入金额)

8

本文的目的是介绍JS金额输入控制的详细情况,特别关注js只能输入金额的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解JS金额输入控制的机会,同时也不会遗漏关于25.k

本文的目的是介绍JS金额输入控制的详细情况,特别关注js只能输入金额的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解JS金额输入控制的机会,同时也不会遗漏关于25.kubernetes(k8s)笔记 认证、授权与准入控制(五) 准入控制、Android 金额输入 EditText 共通方法、Angularjs:将所需的指令控制器注入控制器而不是链接功能、AngularJS:将所需的指令控制器注入控制器,而不是链接函数的知识。

本文目录一览:

JS金额输入控制(js只能输入金额)

JS金额输入控制(js只能输入金额)

如题,oschina有没有这个插件啊。

25.kubernetes(k8s)笔记 认证、授权与准入控制(五) 准入控制

25.kubernetes(k8s)笔记 认证、授权与准入控制(五) 准入控制

准入控制

一、什么是K8S之准入控制
就是在创建资源经过身份验证之后,kube-apiserver在数据写入etcd之前做一次拦截,然后对资源进行更改、判断正确性等操作。

LimitRange,ResourceQuota

目的:能控制特定命名空间中的资源使用量,最终实现集群的公平使用和成本的控制

  1. LimitRange:为Pod添加默认的计算资源需求和计算资源限制;以及存储资源需求和存储资源限制;
    支持分别在容器和Pod级别进行限制;
    比如:指定名称空间下每个Pod CPU、内存的最低最高额度
  2. ResourceQuota:限制资源数量,限制计算资源总量,存储资源总量;
    比如:指定名称空间下,只允许创建Pod、svc的数量, 所有Pod CPU、内存的最低最高额度
  • 需要实现的功能如下:
    限制运行状态的Pod的计算资源用量
    限制持久存储卷的数量以控制对存储的访问
    限制负载均衡器的数量以控制成本
    防止滥用网络端口
    提供默认的计算资源Requests以便于系统做出更优化的调度
  • 一个 LimitRange(限制范围) 对象提供的限制能够做到:
    在一个命名空间中实施对每个 Pod 或 Container 最小和最大的资源使用量的限制。
    在一个命名空间中实施对每个 PersistentVolumeClaim 能申请的最小和最大的存储空间大小的限制。
    在一个命名空间中实施对一种资源的申请值和限制值的比值的控制。
    设置一个命名空间中对计算资源的默认申请/限制值,并且自动的在运行时注入到多个 Container 中。

二、启用 LimitRang
对 LimitRange 的支持自 Kubernetes 1.10 版本默认启用。
LimitRange 支持在很多 Kubernetes 发行版本中也是默认启用的。
LimitRange 的名称必须是合法的 DNS 子域名。

三、限制范围总览
管理员在一个命名空间内创建一个 LimitRange 对象。
用户在命名空间内创建 Pod ,Container 和 PersistentVolumeClaim 等资源。
LimitRanger 准入控制器对所有没有设置计算资源需求的 Pod 和 Container 设置默认值与限制值, 并跟踪其使用量以保证没有超出命名空间中存在的任意 LimitRange 对象中的最小、最大资源使用量以及使用量比值。
若创建或更新资源(Pod、 Container、PersistentVolumeClaim)违反了 LimitRange 的约束, 向 API 服务器的请求会失败,并返回 HTTP 状态码 403 FORBIDDEN 与描述哪一项约束被违反的消息。
若命名空间中的 LimitRange 启用了对 cpu 和 memory 的限制, 用户必须指定这些值的需求使用量与限制使用量。否则,系统将会拒绝创建 Pod。
LimitRange 的验证仅在 Pod 准入阶段进行,不对正在运行的 Pod 进行验证

示例1: 创建LimitRange准入控制策略

  • 对Pod、容器、PVC等资源进行限制
[root@k8s-master authfiles]# cat limitrange-demo.yaml 
apiVersion: v1
kind: LimitRange
metadata:
  name: core-resource-limits
  namespace: dev  #名字空间级别资源 对整个名额空间生效
spec:
  limits:
  - type: Pod  #对Pod限制
    max:
      cpu: "4"  #CPU最大不能超过4核
      memory: "4Gi"  #内存不能超过4G
    min:
      cpu: "500m"  #CPU最小不能小于500m
      memory: "16Mi"  #内存不能小于16M
  - type: Container  #对容器作限制
    max:
      cpu: "4"
      memory: "1Gi"
    min:
      cpu: "100m"
      memory: "4Mi"
    default:  #上阈值  #如果容器中没有做requests或limits作限制,则附加的默认值
      cpu: "2"
      memory: "512Mi"
    defaultRequest:  #下阈值
      cpu: "500m" 
      memory: "64Mi"
    maxLimitRequestRatio:  #最大限制请求比率 上阈值/下阈值 也可以用倍数做限制
      cpu: "4"
  - type: PersistentVolumeClaim  #对PV做限制
    max:
      storage: "10Gi"
    min:
      storage: "1Gi"
    default:
      storage: "5Gi"
    defaultRequest:
      storage: "1Gi"
    maxLimitRequestRatio:  #没有下阈值 也可以用倍数做限制
      storage: "5"
  • 创建LimitRange策略
[root@k8s-master authfiles]# kubectl apply -f limitrange-demo.yaml 
limitrange/core-resource-limits created
[root@k8s-master authfiles]# kubectl get limitrange -n dev
NAME                   CREATED AT
core-resource-limits   2021-08-25T02:29:04Z
[root@k8s-master authfiles]# kubectl get pod -n dev
NAME                              READY   STATUS    RESTARTS   AGE
deployment-demo-fb544c5d8-4jvgh   1/1     Running   0          16h
deployment-demo-fb544c5d8-7fq8f   1/1     Running   0          16h
deployment-demo-fb544c5d8-hdsz4   1/1     Running   0          16h
deployment-demo-fb544c5d8-qq7mp   1/1     Running   0          16h

[root@k8s-master authfiles]# kubectl describe  limitrange core-resource-limits -n dev
Name:                  core-resource-limits
Namespace:             dev
Type                   Resource  Min   Max   Default Request  Default Limit  Max Limit/Request Ratio
----                   --------  ---   ---   ---------------  -------------  -----------------------
Pod                    cpu       500m  4     -                -              -
Pod                    memory    16Mi  4Gi   -                -              -
Container              memory    4Mi   1Gi   64Mi             512Mi          -
Container              cpu       100m  4     500m             2              4
PersistentVolumeClaim  storage   1Gi   10Gi  1Gi              5Gi            5
  • 验证测试策略是否生效
[root@k8s-master authfiles]# kubectl run testpod-$RANDOM --image="ikubernetes/demoapp:v1.0" -n dev
pod/testpod created

[root@k8s-master authfiles]# kubectl get pod -n dev
NAME            READY   STATUS              RESTARTS   AGE
testpod-1017    1/1     Running             0          93s

[root@k8s-master authfiles]# kubectl get pods testpod -n dev -o yaml
...
spec:
  containers:
  - image: kubernetes/demoapp:v1.0
    imagePullPolicy: IfNotPresent
    name: testpod
    resources:  #默认值
      limits:
        cpu: "2"   #最高2核
        memory: 512Mi
      requests:
        cpu: 500m #最低500m
        memory: 64Mi
  • 创建小于内存限制的Pod 创建失败
[root@k8s-master authfiles]# kubectl run testpod-$RANDOM  --image="ikubernetes/demoapp:v1.0" -n dev  --limits=''cpu=2,memory=1Gi'' --requests=''cpu=1,memory=8Mi''
Error from server (Forbidden): pods "testpod-10340" is forbidden: minimum memory usage per Pod is 16Mi, but request is 8388608

ResourceQuota

  • ResourceQuota资源可限制名称空间中处于非终止状态的所有Pod对象的计算资源需求及计算资源限制总量。
  • cpu或requests.cpu: CPU资源相关请求的总量限额;
  • memory或requests.memory: 内存资源相关请求的总量限额;
  • limits.cpu: CPU资源相关限制的总量限额;
  • limits.memory:内存资源相关限制的总量限额;
  • Rescurcebuota资源还支持为本地名称空间中的PVC存储资源的需求总量和限制总量提供限额,它能够分别从名称空间中的全部PVC、隶属于特定存储类的PVC以及基于本地临时存储的PVC三个类别分别进行定义。
  • requests.storage:所有PVC存储需求的总量限额;空间限制;
  • persistentvolumeclaims:可以创建的PVC总数限额;数量限制;
  • <storage-class-name>.storageclass.storage.k8s.io/requests.storage:特定的存储类上可使用的所有PVC存储需求的总量限额;
  • <storage-class-name>.storageclass.storage.k8s.io/persistentvolumeclaims:特定的存储类上可使用的PVC总数限额;
  • requests.ephemeral-storage:所有Pod可以使用的本地临时存储资源的requets总量;
  • limits.ephemeral-storage:所有Pod可用的本地临时存储资源的limits总量。

示例2:创建ResourceQuota准入控制策略

[root@k8s-master authfiles]# cat resourcequota-demo.yaml 
apiVersion: v1
kind: ResourceQuota
metadata:
  name: resourcequota-demo
  namespace: dev
spec:
  hard :
    pods: "5"  #Pod总量
    count/services: "5"  #svc总量
    count/configmaps: "5"
    count/secrets: "5"
    count/cronjobs.batch: "2"
    requests.cpu: "2"  #cpu下阈值总量
    requests.memory: "4Gi"
    limits.cpu: "4"  #cpu上阈值总量
    limits.memory: "8Gi"
    count/deployments.apps: "2"
    count/statefulsets.apps: "2"
    persistentvolumeclaims: "6"
    requests.storage: "20Gi"
    longhorn.storageclass.storage.k8s.io/requests.storage: "20Gi"
    longhorn.storageclass.storage.k8s.io/persistentvolumeclaims: "6"

[root@k8s-master authfiles]# kubectl apply -f resourcequota-demo.yaml 
resourcequota/resourcequota-demo created
[root@k8s-master authfiles]# kubectl get ResourceQuota -n dev
NAME                 AGE   REQUEST                                                                                                                                                                                                                                                                                                                                                                                                    LIMIT
resourcequota-demo   33s   count/configmaps: 0/5, count/cronjobs.batch: 0/2, count/deployments.apps: 0/2, count/secrets: 3/5, count/services: 0/5, count/statefulsets.apps: 0/2, longhorn.storageclass.storage.k8s.io/persistentvolumeclaims: 0/6, longhorn.storageclass.storage.k8s.io/requests.storage: 0/20Gi, persistentvolumeclaims: 0/6, pods: 1/5, requests.cpu: 500m/2, requests.memory: 64Mi/4Gi, requests.storage: 0/20Gi   limits.cpu: 2/4, limits.memory: 512Mi/8Gi
  • 创建不符合标准的Pod 验证测试策略是否生效
[root@k8s-master authfiles]# kubectl describe resourcequota resourcequota-demo -n dev
Name:                                                        resourcequota-demo
Namespace:                                                   dev
Resource                                                     Used   Hard
--------                                                     ----   ----
count/configmaps                                             0      5
count/cronjobs.batch                                         0      2
count/deployments.apps                                       0      2
count/secrets                                                3      5
count/services                                               0      5
count/statefulsets.apps                                      0      2
limits.cpu                                                   2      4
limits.memory                                                512Mi  8Gi
longhorn.storageclass.storage.k8s.io/persistentvolumeclaims  0      6
longhorn.storageclass.storage.k8s.io/requests.storage        0      20Gi
persistentvolumeclaims                                       0      6
pods                                                         1      5
requests.cpu                                                 500m   2
requests.memory                                              64Mi   4Gi
requests.storage                                             0      20Gi


[root@k8s-master authfiles]# kubectl run testpod-$RANDOM --image="ikubernetes/demoapp:v1.0" -n dev
pod/testpod-10678 created

[root@k8s-master authfiles]# kubectl describe resourcequota resourcequota-demo -n dev
Name:                                                        resourcequota-demo
Namespace:                                                   dev
Resource                                                     Used   Hard
--------                                                     ----   ----
count/configmaps                                             0      5
count/cronjobs.batch                                         0      2
count/deployments.apps                                       0      2
count/secrets                                                3      5
count/services                                               0      5
count/statefulsets.apps                                      0      2
limits.cpu                                                   4      4   #配额已使用完 无法在创建Pod
limits.memory                                                1Gi    8Gi
longhorn.storageclass.storage.k8s.io/persistentvolumeclaims  0      6
longhorn.storageclass.storage.k8s.io/requests.storage        0      20Gi
persistentvolumeclaims                                       0      6
pods                                                         2      5
requests.cpu                                                 1      2
requests.memory                                              128Mi  4Gi
requests.storage                                             0      20Gi

[root@k8s-master authfiles]# kubectl run testpod-$RANDOM --image="ikubernetes/demoapp:v1.0" -n dev 
Error from server (Forbidden): pods "testpod-30200" is forbidden: exceeded quota: resourcequota-demo, requested: limits.cpu=2, used: limits.cpu=4, limited: limits.cpu=4
#报错 策略已生效

Android 金额输入 EditText 共通方法

Android 金额输入 EditText 共通方法

代码改变世界

EditText 输入框实现最多到小数点后两位(金额显示)

package com.lianpos.util;

import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

/**
 * Created by wangshuai on 2017/11/29 0029.
 */

public class MoneyEditText {
    public static void setPricePoint(final EditText editText) {

        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                                      int count) {
                if (s.toString().contains(".")) {
                    if (s.length() - 1 - s.toString().indexOf(".") > 2) {
                        s = s.toString().subSequence(0,
                                s.toString().indexOf(".") + 3);
                        editText.setText(s);
                        editText.setSelection(s.length());
                    }
                }
                if (s.toString().trim().substring(0).equals(".")) {
                    s = "0" + s;
                    editText.setText(s);
                    editText.setSelection(2);
                }
                if (s.toString().startsWith("0") && s.toString().trim().length() > 1) {
                    if (!s.toString().substring(1, 2).equals(".")) {
                        editText.setText(s.subSequence(0, 1));
                        editText.setSelection(1);
                        return;
                    }
                }
            }
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }
            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
            }
        });
    }
}

  使用方法:

MoneyEditText.setPricePoint(number_unit_edit);

  number_unit_edit 是 edittext,如下:

<EditText
            android:id="@+id/number_unit_edit"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:background="@null"
            android:gravity="right"
            android:hint="0.00"
            android:maxLength="7"
            android:inputType="numberDecimal"
            android:padding="15dp"
            android:textColor="#333333"
            android:textSize="16dp" />

  

Angularjs:将所需的指令控制器注入控制器而不是链接功能

Angularjs:将所需的指令控制器注入控制器而不是链接功能

正常情况下有角度

如果您有父指令和子指令,则在父指令的控制器中创建方法,并要求您的子指令中的父控制器.角度将父控制器传递到您的子指令链接功能中.

我的用例

我有一个用例,子指令是另一个指令的父对象.我在中间的指令要求的顶部指令.中间指令是最后一个指令在底部所要求的.

在一个简单的世界中,我可以创建一个链接方法和一个中间指令的控制器.链接方法处理与顶部控制器的所有内容,并将中间控制器传递到底部指令.

在我的情况下,中间指令的控制器中的方法必须调用父进程中的方法,所以我需要中间控制器中的顶级控制器,而不是中间命令的链接功能!

问题

如何将控制器注入控制器而不是链接功能

angular.module('app').directive('top',function () {
    return {
        $scope: true,templateUrl: "top.html",controller: function() {
            this.topMethod = function() {
                // do something on top
            }
        }
    }
});

angular.module('app').directive('middle',templateUrl: "middle.html",require: "^top",controller: function($scope,$attrs,topController) {
            this.middleMethod = function() {
                // do something in the middle

                // call something in top controller,this is the part that makes everything so complicated
                topController.topMethod();
            }
        }
    }
});

angular.module('app').directive('bottom',templateUrl: "bottom.html",require: "^middle",link: function(scope,element,attrs,middleController) {
            $scope.bottomMethod = function() {
                // do something at the bottom

                // call something in the parent controller
                middleController.middleMethod();
            }
        }
    }
});
实际上还有另一种方法比较冗长和 is used by the angular ngModel itself:
var parentForm = $element.inheritedData('$formController') || ....

基本上他们使用控制器存储在指令dom元素的data属性中的事实.

仍然有点有线,但不那么冗长,更容易理解.

我没有看到为什么您不能将所需的控制器传递到指令控制器的注入本地的原因.

AngularJS:将所需的指令控制器注入控制器,而不是链接函数

AngularJS:将所需的指令控制器注入控制器,而不是链接函数

正常使用案例

如果您有父指令和子指令,则可以在父指令的控制器中创建方法,并在子指令中需要父控制器。Angular会将父控制器传递到您的子指令链接函数中。

我的用例

我有一个用例,其中子指令是另一个指令的父指令。我在中间的指令要求的顶部有on指令。中间的指令是底部的最后一个指令所必需的。

在一个简单的世界中,我可以为中间指令创建一个链接方法和一个控制器。link方法使用顶部控制器处理所有内容,并且将中间控制器传递给bottom指令。

在我的情况下,中间指令的控制器中的方法必须调用父代中的方法,因此我需要中间控制器中的顶级控制器,而不是中间指令的link函数中的!

问题

如何将所需的控制器而不是链接功能注入到控制器中

angular.module('app').directive('top',function () {
    return {
        $scope: true,templateUrl: "top.html",controller: function() {
            this.topMethod = function() {
                // do something on top
            }
        }
    }
});

angular.module('app').directive('middle',templateUrl: "middle.html",require: "^top",controller: function($scope,$attrs,topController) {
            this.middleMethod = function() {
                // do something in the middle

                // call something in top controller,this is the part that makes everything so complicated
                topController.topMethod();
            }
        }
    }
});

angular.module('app').directive('bottom',templateUrl: "bottom.html",require: "^middle",link: function(scope,element,attrs,middleController) {
            $scope.bottomMethod = function() {
                // do something at the bottom

                // call something in the parent controller
                middleController.middleMethod();
            }
        }
    }
});

关于JS金额输入控制js只能输入金额的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于25.kubernetes(k8s)笔记 认证、授权与准入控制(五) 准入控制、Android 金额输入 EditText 共通方法、Angularjs:将所需的指令控制器注入控制器而不是链接功能、AngularJS:将所需的指令控制器注入控制器,而不是链接函数等相关内容,可以在本站寻找。

本文标签: