как я могу установить значение по умолчанию в ui-select

#angularjs #angularjs-ng-model #ui-select

#angularjs #angularjs-ng-model #ui-select

Вопрос:

Я попытался установить ng-init и указать начальное значение ng-model, все не удалось

 $scope.newSubItem = function (scope) {
    var modal = $uibModal.open({
        backdrop: 'static',
        templateUrl: 'catalog/inputForm/partial/add_new_softwareOnTree.html',
        scope: newScope,
        controller: ['$scope', '$uibModalInstance','_', function ($scope, 
                    $uibModalInstance,_) {
        $scope.nodeRelationships4CatalogAddingSoftware = 
                codeTableService.nodeRelationships4CatalogAddingSoftware;
        $scope.targetNodes4ContainedInOrDependsOn = 
                  targetNodes4ContainedInOrDependsOn;
        $scope.nodes = nodes;
        $scope.newSoftware = {};
        var targetNodeId = nodeData amp;amp; nodeData.id;
        $scope.newSoftware.target = 
              _.find(targetNodes4ContainedInOrDependsOn,function (o) {
                   return o.name ===  targetNodeId;
              });
        $scope.componentsQueryUrl = 
                  CONSTANTS.SERVICE_BLUEPRINT_COMPONENTS.PATH   "?query";
        $scope.submit = function () {           
         catalogCustomizedSoftwareComponentConfigService.onAddSoftwareSubmit(
              $scope,
              $scope.newSoftware,
              $scope.targetNodes4ContainedInOrDependsOn);

        $uibModalInstance.close($scope.targetNodes4ContainedInOrDependsOn);
           };
     }]
});
 
 <div class="form-group row">
    <label class="col-lg-2 col-md-2 col-sm-2 control-label required">{{'Relationships' | translate}}</label>
    <div class="col-lg-9 col-md-9 col-sm-9">
        <div class="input-group">
        <ui-select ng-model="newSoftware.relationship"name="nodeRelationships" 
             required>
        <ui-select-match placeholder="{{'Please select a 
          relationship'|translate}}">{{$select.selected.name|translate}}
        </ui-select-match>
        <ui-select-choices repeat="item.id as item in 
          nodeRelationships4CatalogAddingSoftware | translateItemFilter: { 
         name:$select.search}">
        <div ng-bind-html="item.name | translate | highlight: $select.search"> 
        </div>
        </ui-select-choices>
        </ui-select>
     </div>
<span class="error" ng-show="addSoftWareForm.nodeRelationships.$touched amp;amp; addSoftWareForm.nodeRelationships.$error.required">
{{'Please select a relationship'|translate}}
</span>
</div>

 
 codeTableService.nodeRelationships4CatalogAddingSoftware = 
[
{id: "cloudify.relationships.contained_in", name: "contained_in"},
{id: "cloudify.relationships.depends_on", name: "depends_on"}
]
 

Я хочу установить начальное значение ui-select, пока значение не отображается.
Я ожидаю установить начальное значение ui-select равным «contained_in»

 $scope.newSoftware.relationship = codeTableService.nodeRelationships4CatalogAddingSoftware[0].name
 

И выпадающий список содержит два значения:

 ["contained_in", "installed_to"]
 

Комментарии:

1. Как выглядит объект nodeRelationships4CatalogAddingSoftware? У него есть I’d и имя. Они одинаковые? Contined_in — это ввод и имя? Я спрашиваю только потому, что вы говорите, что в раскрывающемся списке отображается contains_in, который является именем. Какой идентификатор?

2. тип программного обеспечения nodeRelationships4CatalogAddingSoftware: массив

Ответ №1:

Возможно, все, что вам нужно, это присвоить модели начальное значение. Я не думаю, что оно будет отображаться во внешнем интерфейсе.

Комментарии:

1. Я не могу понять, когда я пытаюсь присвоить начальное значение модели, например javascript $scope.newSoftware.relationship = "contained_in"; , ui-select будет отображать none при загрузке страницы.

2. Вы устанавливаете $scope.newSoftware.relationship = "contained_in"; , но при повторении вы устанавливаете значение выбранного элемента на item.id , который не является «contained_in». Попробуйте установить начальное значение $scope.newSoftware.relationship = nodeRelationships4CatalogAddingSoftware[0],id; , если вы хотите использовать имя вместо этого, измените repeat="item.name as item in nodeRelationships4CatelogAddingSoftware" , и тогда вы сможете использовать имя.

3. @KerouacJack Разве это не то поведение, которое вы хотели? Я неправильно понял?

4. @kendavidson Я пробовал $scope.newSoftware.relationship = codeTableService.nodeRelationships4CatalogAddingSoftware[0].name; в то время как браузер получает ошибку типа: невозможно установить свойство ‘relationship’ неопределенного

5. Это означает, что newsoftware не определено. Вы можете справиться с этим, просто используйте обозначение объекта, чтобы установить его.