【问题标题】:angular js add JSON to ng-listangular js将JSON添加到ng-list
【发布时间】:2015-05-07 23:29:45
【问题描述】:

我有 3 个属性,包括 JSON 对象数组“注释”。

$scope.notes = [
        {
            'type':'txt',
            'name': 'JohnHenry',
            'text':'Greeting',
        }
    ]; 

我的输入字段是

`<input type="text" placeholder="Text here..." ng-model="note.input" ng-list="," ng-enter="addnote()">`

我将在输入文本字段中输入以下文本。

"txt-Glen-Negotiate Price, num-Phil-0939876, met-DrWalh-1505"

type 属性是显示图标。我希望得到如下 JSON

$scope.notes = [
        {
            'type':'txt',
            'name': 'JohnHenry',
            'text':'Greeting',
        },{
            'type':'txt',
            'name': 'Glen',
            'text':'negotiate price',
        },{
            'type':'num',
            'name': 'Phil',
            'text':'0939876',
        },{
            'type':'met',
            'name': 'DrWalh',
            'text':'1505',
        }
    ];

如何将输入的 ng-list 文本转换为 JSON 对象。

【问题讨论】:

    标签: json angularjs angular-nglist


    【解决方案1】:

    编写你自己的指令

    app.directive('jsonConvert', function(){
      return {
        require: 'ngModel',
        link: function (scope, elm, attrs, ngModel){
          scope.$watch(
            function(){
                return ngModel.$modelValue;
            }, function(newValue, oldValue){
                var value = ngModel.$modelValue
                if (value instanceof Array) return;
                var valueArr = value ? value.split(',') : value;
                if (!valueArr) return;
                for (var i = 0; i < valueArr.length; i++){
                  if (valueArr[i]){
                    var splitItem = valueArr[i].split("-");
                  }
                  valueArr[i] = {
                    type: splitItem[0] ? splitItem[0] : '',
                    name: splitItem[1] ? splitItem[1] : '',
                    text:  splitItem[2] ? splitItem[2] : ''
                  }
                }
                var result = valueArr;
                ngModel.$setViewValue(result);
            }, true);
        }
      }
    })
    

    尽管您定义所需内容的方式可能无法扩展或最佳实践,因为它将 0 映射到类型,1 映射到名称,2 映射到文本

    示例 - http://plnkr.co/edit/vtcpiYsTYKq3H2QTupyS?p=preview

    【讨论】:

    • 谢谢Yang Li,您能指出该指令的可扩展性或最佳实践的含义吗?我只是 angularjs 的菜鸟。检查我的声誉分数。 :P 我已经开始尝试增加前端技能。 :-) 不管怎样,谢谢你的分享
    • 对于用户而言,遵循您编写的格式非常复杂。他们很容易弄乱定位,因此对于 txt-Glen-Negotiate Price,他们可能会意外地以不同的顺序编写 Glen-txt-Negotiate Price。我建议有 3 个不同的输入字段。无论如何只是一个用户体验建议。
    猜你喜欢
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多