【问题标题】:how to filter input value in AngularJS如何过滤AngularJS中的输入值
【发布时间】:2015-06-20 09:24:14
【问题描述】:

我正在尝试对我的输入元素进行过滤。 我想对 type="text" 字段的输入进行过滤。 例如,如果模型包含的可用字符多于我想要更改的输入值。 我创建了jsfiddle 我有动态生成 html 模板的指令,它包含输入字段。

var app = angular.module('app', [])

.controller('ctrlr', function($scope){
    $scope.myModel = "test";
    $scope.availableCharacters = 5;
    $scope.$watch('myModel', function(newValue, oldValue){
        if(!newValue){
            return;
        }
        if(newValue.length > 5){
             $scope.cutString();       
         }
    });
    $scope.cutString = function(){
        var length = $scope.myModel.length;
        var string = $scope.myModel.slice(0, $scope.availableCharacters);
        var countStars = length - string.length;
        $scope.myModel = $scope.createStars(string, countStars);
    }
    $scope.createStars = function(string, countStars){
        for(var i = 1; i <= countStars; i++){
                string = string+'*';
            }

        return string;
    }
})
.directive('awesome' , function(){
    return {
        restrict:'E',
        template:'<input type="text" ng-model="myModel" ng-value="myModel | filter:my" />'
    }
})

是否可以将我的代码移动到过滤器函数中?我有很多业务逻辑,我不想将我的代码保留在控制器中,因为它将是可重用的指令。

【问题讨论】:

    标签: javascript angularjs angularjs-directive angularjs-filter


    【解决方案1】:

    我认为将这部分功能实现为过滤器并不是最好的主意。

    如果你将它作为输入元素上的指令来实现,它会更加动态,例如:

    <input type="text" ng-model="myModel" ng-value="myModel" max-length="20" />
    

    在这种情况下,它会更加灵活。您将能够将参数传递给指令(例如可接受值的长度)。

    另外,其他开发人员将您的输入作为指令的模板也不是真正可读的,因为您使用模型作为输入字段的属性,而不是从指令绑定它。

    你有什么理由使用指令来呈现简单的输入吗? 如果没有,那么只需将其作为视图中的输入并添加指令而不是过滤器来处理数据检查限制。


    另一种方法是实现自定义表单控件。这将允许您控制传入和传出的数据。

    这是文档中的一个示例 - Implementing custom form controls (using ngModel)

    【讨论】:

    • 感谢您的建议。我会考虑的。
    • 我肯定会选择 ngModelController,因为您在表单字段上进行操作,并且不会在您喜欢将特定输入字段放置到您的应用程序的任何地方复制您的控制器代码。我在输入字段的实时 i18n(无页面刷新)数字值方面遇到了类似的问题,当从德语切换到英语语言环境时,我必须切换数字的组和小数点分隔符。正如 U10 提到的,请查看 ngModel。 stackoverflow.com/a/15346236/1554767那个链接打开了我的思路,把我带进了 ngModel 的地狱。
    猜你喜欢
    • 2018-02-02
    • 2018-09-30
    • 1970-01-01
    • 2022-01-23
    • 2019-09-03
    • 2016-12-29
    • 2015-07-18
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多