首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angularjs使用组件封装inputbox

Angularjs使用组件封装inputbox
EN

Stack Overflow用户
提问于 2019-03-06 12:30:28
回答 1查看 54关注 0票数 2

我想将一个inputBox封装到AngularJS组件中。在将输入传递给绑定模型数据之前,该组件会自动向输入添加一些前缀。例如前缀为"testPrefix",当用户输入"ABC“时,对应的模型数据将为"testPrefixABC”。

我的代码是这样的:

代码语言:javascript
复制
angular.module('').component('dummyBox', {
    bindings: {
        ngModel: '='
    },
    require: {
        ngModelCtrl: 'ngModel'
    },
    template: '<span><input type="text" ng-model="$ctrl.ngModel" /></span>',
    controller: function() {
        $ctrl.$onInit = () => {
            $ctrl.ngModelCtrl.$parsers.push((viewValue) => {
                if(viewValue) return "testPrefix" + viewValue;
            });

            $ctrl.ngModelCtrl.$formatters.push((modelValue) => {
                return modelValue.substr("textPrefix".length);
            });
        }
    }
});
代码语言:javascript
复制
<dummy-box ng-model="outScopeVar"></dummy-box>
<label>{{outScopeVar}}</label>

现在它不起作用,label中的内容仍然是输入值,没有添加前缀字符串。任何帮助都将不胜感激。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-07 15:53:54

上面代码使用指令而不是组件,

代码语言:javascript
复制
app.directive("inputEncaps", function(){
        return {
            require: "ngModel",
            link: function(scope, element, attrs, ngModel){
                ngModel.$parsers.push((viewValue) => {
                    if(viewValue && !viewValue.includes("textPrefix")) {
                        return "testPrefix" + viewValue;
                    } else {
                        return viewValue;
                    }
                });
    
                ngModel.$formatters.push((modelValue) => {
                    let model = modelValue && modelValue.length >= "textPrefix".length ? 
                    modelValue.substr("textPrefix".length) : modelValue;
                    return modelValue;
                });
            }
        };
    });
代码语言:javascript
复制
<input ng-model="inputVar" input-encaps/>

<label>{{inputVar}}</label>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55015600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档