如何使用AngularJS在textarea中生成每一行的数组,反之亦然?

时间:2017-06-28 01:36:56

标签: angularjs

function TodoCtrl($scope) {
    $scope.delete = function(i){
        $scope.myArray.splice(i, 1);
    }
    $scope.myStr = 'aaaa\nbbbb\nccccc';
    $scope.$watch('myStr', function(myStr){
        $scope.myArray = myStr.split('\n');
        console.log('$scope.myArray', $scope.myArray);
    });
    $scope.$watch('myArray', function(e){
        if(e.length > 0){
            var string = '';
            for(var i = 0; i < e.length; i++){
                if( e[i] !== ''){
                    string += e[i] + "\n";
                }
            }
            $scope.myStr = string;            
        }
    }, true);
}

我尝试创建一个textarea,其输入绑定到array,其中条目对应于文本中的每一行。

每次删除元素时,textarea中的对应文本也应删除。

我如何实现这一目标? 我尝试使用$ scope函数$watch,但是当我在textarea中键入文本时,我遇到了一些问题,始终会生成一个字符。< / p>

Jsfiddle更好看: https://jsfiddle.net/pf4v83mb/

1 个答案:

答案 0 :(得分:0)

当从数组构造字符串时,你犯了一个小错误:在末尾添加了不必要的\njsfiddle)。这就是为什么当你在文本框中键入字母时,空白的新项目(\n)被添加到数组中,并强制文本框执行相同的操作,即转到新行:

$scope.$watch('myArray', function(e){       
    if(e.length > 0){
        var string = '';
        for(var i = 0; i < e.length; i++){
            if( e[i] !== ''){
                //'\n' not needed for last element
                string += e[i] + (i == e.length - 1 ? '' : "\n");
            }
        }
        $scope.myStr = string;

    }
}, true);