【问题标题】:Bootstrap dropdown and AngularJS the same ng-model for dropdown inside ng-repeatBootstrap 下拉菜单和 AngularJS 相同的 ng-model 用于 ng-repeat 中的下拉菜单
【发布时间】:2017-08-15 01:26:07
【问题描述】:

我有规则列表,每个规则内都有属性属性,应该从属性下拉列表中设置和获取。在 ng-repet 中,我显示所有规则,即每个属性都具有相同的 ng-model、ng-controller 和 ng-change。这可能会使应用程序感到困惑。我不知道如何在从 ruleList[i].attribute 读取的下拉列表中设置属性。从下拉列表中选择时,选择正确的 selectedAttribute - ng-change。当想要从下拉列表中设置值时,它不起作用。如何添加一些索引或其他东西? 我已经根据这个例子写了它:http://www.infragistics.com/community/blogs/dhananjay_kumar/archive/2015/06/29/how-to-work-with-the-bootstrap-dropdown-in-angularjs.aspx

HTML 代码:

<tr ng-repeat="r in vm.ruleset.ruleList track by $index" ng-init="$ruleIndex = $index">
    <td align='right'>
        <div ng-controller="vm.attributeDropdown" init-data="$ruleIndex" class="col-xs-12 col-sm-4 col-md-3">
            <div class="form-group" ng-class="{ 'has-error': vm.rulesetForm.attribute.$touched && vm.rulesetForm.attribute.$invalid }">
                <div>
                    <span>{{selectedAttribute}}</span>
                        <select class="form-control" required ng-model="selectedAttribute" ng-options="i.attributenamecap for i in vm.attributes" id="vm.rulesetForm.attribute" ng-change="correctAttribute($ruleIndex, selectedAttribute)">
                            <option style="display:none" translate="rulesets.ruleset.form.placeholder.attribute""></option>
                        </select>
                        </div>
                       <div class="help-block" ng-show="vm.rulesetForm.$submitted || vm.rulesetForm.attribute.$touched">
                       <span ng-show="vm.rulesetForm.attribute.$error.required" translate=  "rulesets.ruleset.form.error.required.attribute"></span>
                </div>
            </div>
        </div>
    </td>
</tr>

ng-change 控制器:

 $scope.correctAttribute = function(index, selectedAttribute){
    if(index !== undefined || index !== null){
        vm.ruleset.ruleList[index].attribute = selectedAttribute;
    }
}

ng-controller 上的控制器:

function attributeDropdown($scope){
    var index = $scope.$ruleIndex;
    $scope.vm.attributes = vm.attributes;
    $scope.vm.attributes.unshift('');
    if(!isNew()){
        if(vm.ruleset.ruleList[index].attribute === ''){
            vm.ruleset.ruleList[index].attribute = null;
            $scope.selectedAttribute = vm.ruleset.ruleList[index].attribute;
            vm.original = angular.copy(vm.ruleset);
        }else{
            $scope.selectedAttribute = vm.ruleset.ruleList[index].attribute;
        }
    }else if(vm.ruleset.ruleList[index].attribute !== undefined ){
    $scope.selectedAttribute = vm.ruleset.ruleList[index].attribute;
    }
}

【问题讨论】:

    标签: angularjs drop-down-menu angular-ngmodel angularjs-ng-change ng-controller


    【解决方案1】:

    使用ng-model="r.selectedAttribute" 而不是ng-model="selectedAttribute"

    类似的东西

     <select class="form-control" required ng-model="r.selectedAttribute" ng-options="i.attributenamecap for i in vm.attributes" id="vm.rulesetForm.attribute" ng-change="correctAttribute($ruleIndex, r.selectedAttribute)">
             <option style="display:none" translate="rulesets.ruleset.form.placeholder.attribute""></option>
        </select>
    

    【讨论】:

    • 好的,这样会好一点。如果我删除 {{r.selectedAttribute}},我还有一个问题,因为我不需要它,而不是在关闭的下拉列表中显示所选项目,但是当我打开下拉列表时,下面的值被设置。这是为什么?如何处理这个问题?
    • @wanttobeprofessional 我没有清楚地理解你的问题。但是纯 HTML 选择有角度问题,所以我建议你看看 ui-select
    • 当我从数据库中读取数据并显示表单如何设置每个属性时,这就是我的问题。缺少选择,当我从 dorpdown 中选择项目时,我可以检测到该值,但我无法设置它。
    • 你能在jsfiddleplunker 上创建类似的东西,以便更容易看到问题
    猜你喜欢
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2015-04-25
    相关资源
    最近更新 更多