【问题标题】:AnguarJS: Bind dynamically created controls to modelAngularJS:将动态创建的控件绑定到模型
【发布时间】:2015-02-13 13:19:57
【问题描述】:

我需要根据用户的输入动态创建一个 GUI。一个用例是,用户在生成的报告中输入他/她想要的标题数量。因此,我通过 ng-repeat 渲染输入控件,效果很好。在那些呈现的输入标签中,必须可以输入报告的标题。

唯一的问题是我不知道如何将文本框的输入绑定到模型,因为输入控件的数量每次都不一样。

观点:

<div ng-app>
    <div ng-controller="Controller">
        <input type="number" ng-model="numberOfCtrls"/>
        <div ng-repeat="i in getTimes(numberOfCtrls) track by $index">
            <input type="text" style="width:100px;" />
        </div>
    </div>
</div>

控制器:

function Controller($scope){
 $scope.numberOfCtrls = 0;   
 $scope.tempNumber = 0;

 $scope.getTimes = function(number){

   return new Array(number);   
 };
}

http://jsfiddle.net/5dzvnbtt/

提前致谢

【问题讨论】:

    标签: angularjs data-binding dynamically-generated


    【解决方案1】:

    您可以使用所需数量的标题对象填充变量。

    这是一个例子:

    $scope.headlines = [];
    
    $scope.$watch('numberOfHeadlines', function() {
        $scope.headlines = [];
        if ($scope.numberOfHeadlines !== undefined) {
            for (i = 0; i < $scope.numberOfHeadlines; i++) {
                $scope.headlines.push({ title: '' });
            };          
        }
    
    });
    

    还有模板:

    <select ng-model="numberOfHeadlines">
        <option value="">Choose headlines</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>
    
    <div ng-repeat="headline in headlines">
        Headline {{ $index + 1 }} is: {{ headline.title }}
        <br />
        <input type="text" ng-model="headline.title">
        <hr />
    </div>
    

    还有一个JSFiddle 演示它。

    【讨论】:

    • 谢谢,这对我有用!我唯一不明白的是,为什么它只适用于对象而不适用于纯字符串值;只是 ng-model="headline" 而不是 ng-model="headerline.title"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多