данные модели и данные изменения не работают с выбранными данными

0

var appCompAssets = angular.module('app.company.assets', []);

appCompAssets.controller('locationDetailCTRL', function($scope, $http) {
  // LOAD LOCATION DETAILS

  $scope.loadBranches = function() {

    $http.get('../getBranches_id_name/' + $scope.compid)
      .then(
        function(response) {
          if (response.data.length !== 0) {
            $scope.getBranches_id_name = response.data;
            console.log($scope.getBranches_id_name);
          }
        },
        function(response) {
          // error handling routine
          console.log('$Error: no data for branch id & name');
        });
  };

  $scope.loadLocations = function(branch_id) {
    $scope.branchid = branch_id;
    $http.get('../getLocations_id_name/' + $scope.branchid)
      .then(

        function(response) {

          if (response.data.length !== $scope.branchid) {
            $scope.getLocations_id_name = response.data;
            console.log($scope.getLocations_id_name);
          }

        },
        function(response) {
          // error handling routine
          console.log('$Error: no data for location id & name');
        });
  };
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div data-ng-app="app.company.assets" data-ng-controller="locationDetailCTRL">

  <div class="row" data-ng-init="loadBranches()">
    <div class="col-sm-12">
      <div class="form-group">
        <label for="branch_id" class="small"><i>Branch</i>
        </label>
        <select class="form-control input-sm" data-ng-init="loadLocations(assetInfo.branch_id)" data-ng-change="loadLocations(assets.branch_id)" id="branch_id" name="branch_id" data-ng-model="assets.branch_id">
          <option data-ng-selected="assetInfo.branch_name ===b.branch_name" data-ng-repeat="b in getBranches_id_name" value="{{b.id}}">{{b.branch_name}}</option>
        </select>
      </div>

    </div>
  </div>

  <div class="row">
    <div class="col-sm-12">
      <div class="form-group">
        <label for="location_id" class="small"><i>Location</i>
        </label>

        <select class="form-control input-sm" id="location_id" name="location_id">
          <option value=""></option>
          <option data-ng-repeat="l in getLocations_id_name" value="{{l.id}}" data-ng-selected="l.location_name == assetInfo.location_name">{{l.location_name}}</option>
        </select>
      </div>
    </div>
  </div>
</div>

Ребята, у меня возникла проблема с одновременным выполнением данных-ng-select, data-ng-model и data-ng-change.

если без данных-ng-model и data-ng-change

выбранный data-ng работает нормально.

Исключенные данные-ng-model и data-ng-change и остаются только выбранными-ng-выводами, выход выглядит следующим образом:

Изображение 174551

Хотя, он может отображать желаемое значение, при изменении ветки (выпадающего списка) местоположение (местоположения) для соответствующей ветки не изменится, так как нет ng-change и ng-model существует.

Однако, если вместе со всем вышеупомянутым атрибутом data-ng (data-ng-model, ng-change и ng-selected), он не будет отображаться должным образом, поскольку ветвь не выбрана, которую она должна выбрать. Вывод выглядит следующим образом:

Изображение 174551

для изменения ветки и местоположения изменится, эта часть работает нормально.

Ваша любезная помощь будет оценена по достоинству. Спасибо!.

Результат ответа сверху - для ветки, а нижний - для местоположения. Спасибо.

Изображение 174551

  • 0
    Не могли бы вы предоставить данные ответа на вызов $ http.get?
  • 0
    Привет @Deep, я предоставил вам данные ответа на оба запроса $ http.get. Спасибо.
Показать ещё 1 комментарий
Теги:
model-view-controller
angular-ui-bootstrap

3 ответа

0
                 <div class="row" data-ng-init="loadBranches()">
                    <div class="col-sm-12">
                        <div class="form-group">
                            <label for ="branch_id" class="small"><i>Branch</i></label>
                            <select class = "form-control input-sm" 
                                    data-ng-options="b.id as b.branch_name for b in getBranches_id_name" data-ng-init="branch_id = assetInfo.branch_id" data-ng-model="branch_id"
                                    data-ng-change="loadLocations(branch_id)" id="branch_id" 
                                    name="branch_id"></select>
                        </div>
                    </div>
                </div>                          
                <div class="row" data-ng-init="loadLocations(branch_id)">
                    <div class="col-sm-12">
                        <div class="form-group">
                            <label for ="location_id" class="small"><i>Location</i></label>
                            <select class = "form-control input-sm"
                                    data-ng-options="l.id as l.location_name for l in getLocations_id_name" 
                                    id="location_id" name="location_id" data-ng-init="location_id = assetInfo.location_id" data-ng-model="location_id" data-ng-disabled="!branch_id" ></select>
                        </div>
                    </div>
                </div> 

Привет @Deep и @abdul mateen mohammed, с приведенным выше кодом, он работает так, как я хотел, однако, есть проблема, я не мог сохранить значение в базе данных (значение выбранной опции не сохраняется в базе данных),

Но с приведенным ниже кодом я могу сохранить значение в базе данных, но он не будет работать так, как я хотел, который по умолчанию будет предварительно загружать ветку и местоположение при загрузке. Единственные изменения, которые я сделал, это добавить "трек" в опцию ng.

                 <div class="row" data-ng-init="loadBranches()">
                    <div class="col-sm-12">
                        <div class="form-group">
                            <label for ="branch_id" class="small"><i>Branch</i></label>
                            <select class = "form-control input-sm" 
                                    data-ng-options="b.id as b.branch_name for b in getBranches_id_name track by b.id" data-ng-init="branch_id = assetInfo.branch_id" data-ng-model="branch_id"
                                    data-ng-change="loadLocations(branch_id)" id="branch_id" 
                                    name="branch_id"></select>
                        </div>
                    </div>
                </div>                          
                <div class="row" data-ng-init="loadLocations(branch_id)">
                    <div class="col-sm-12">
                        <div class="form-group">
                            <label for ="location_id" class="small"><i>Location</i></label>
                            <select class = "form-control input-sm"
                                    data-ng-options="l.id as l.location_name for l in getLocations_id_name track by l.id" 
                                    id="location_id" name="location_id" data-ng-init="location_id = assetInfo.location_id" data-ng-model="location_id" data-ng-disabled="!branch_id" ></select>
                        </div>
                    </div>
                </div>  

Ваша любезная помощь будет оценена по достоинству. Спасибо.

@Deep, вот как я сохранил данные в базе данных. Спасибо. В КОНТРОЛЛЕЛЕ:

function update() {
    $this->model->update($_POST);
}

В МОДЕЛИ:

function update($data) {


    $assetid = $data['assetid'];
    unset($data['assetid']); // remove @assetid element from the array @data


    $this->db->update('assets', $data, "'id' = {$assetid}");

}

  • 0
    Почему вы не можете сохранить значение в базе данных, объясните. Требуется ли полная модель ветки для сохранения в базе данных
  • 0
    @kelvin: Не могли бы вы обновить предоставленный мною плункер и воссоздать проблему?
Показать ещё 10 комментариев
0

попробуйте это, надеюсь, что это поможет, дайте мне знать, если вы ищете что-то другое.

Plunker: http://plnkr.co/edit/VE5ja2kkV9Xp7og1CkAl?p=preview

в скрипте

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {

$scope.branches = [
  { id: 1, name: 'Testing Branch 1'},
  { id: 2, name: 'Testing Branch 2'},
  { id: 3, name: 'Testing Branch 3'}
];

$scope.locations = [
  { id: 1, branchId: 1, name: 'Office Room 1'},
  { id: 2, branchId: 1, name: 'Office Room 2'},
  { id: 3, branchId: 2, name: 'Office Room 3'},
  { id: 4, branchId: 3, name: 'Office Room 4'}
];

$scope.loadLocations = function(branchId) {
  console.log('Selected BranchId: ' + branchId);
};

// for selecting options on page load set the model for both the select

$scope.selectedBranchId =  2;
$scope.selectedLocationId =  3;

});

ввиду.

<body ng-controller="MainCtrl">

<h1>Cascading DropDownList</h1>
<hr />
<h4>Branch</h4>
<select ng-options="branch.id as branch.name for branch in branches"
        ng-model="selectedBranchId"
        ng-change="loadLocations(selectedBranchId)">
  <option value="">Select Branch</option>
</select>
<h4>Location</h4>
<select ng-options="location.id as location.name for location in locations | filter: { branchId: selectedBranchId }"
        ng-model="selectedLocationId"
        ng-disabled="!selectedBranchId">
  <option value="">Select Location</option>
</select>

</body>
  • 0
    Привет @Deep, можешь ли ты посмотреть на новый / последний вопрос, который я разместил выше, в качестве ответа. Спасибо.
0

Что вам нужно, это каскадный выпадающий список, а ваш HTML-код кажется мне сложным для того, чего вы пытаетесь достичь.

Вы можете упростить его следующим образом.

angular
	.module("demo", [])
	.controller("DefaultController", DefaultController);
  
  function DefaultController() {
  	var vm = this;
    vm.branches = [
      { id: 1, name: 'Testing Branch 1' },
      { id: 2, name: 'Testing Branch 2' },
      { id: 3, name: 'Testing Branch 3' }
    ];
    
    vm.locations = [
      { id: 1, branchId: 1, name: 'Office Room 1' },
      { id: 2, branchId: 1, name: 'Office Room 2' },
      { id: 3, branchId: 2, name: 'Office Room 3' },
      { id: 4, branchId: 3, name: 'Office Room 4' }
    ];
    
    vm.loadLocations = loadLocations;
    
    // set data
    getData();
    
    function loadLocations(branchId) {
      // load locations here when branch is changed.
      // if locations are loaded only when a branch is selected
      // then you can remove the filter in ng-options for Location
      console.log('Selected BranchId: ' + branchId);
    };
    
    function getData() {
      // get data via AJAX here and set the selected options in the view via data binding (ngModel)
      var data = {
      	branch: {
          id: 3,
          name: 'Testing Branch 3'
        },
        location: {
          id: 4,
          branchId: 3,
          name: 'Office Room 4'
        }
      };
      
      vm.branch = data.branch.id;
      vm.location = data.location.id;
      }
    }
  
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="demo">
  <div ng-controller="DefaultController as ctrl">
    <h1>Cascading DropDownList</h1>
    <hr />
    <h4>Branch</h4>
    <select ng-options="branch.id as branch.name for branch in ctrl.branches"
            ng-model="ctrl.branch"
            ng-change="ctrl.loadLocations(ctrl.branch)">
      <option value="">Select Branch</option>
    </select>
    <h4>Location</h4>
    <select ng-options="location.id as location.name for location in ctrl.locations | filter: { branchId: ctrl.branch }"
            ng-model="ctrl.location"
            ng-disabled="!ctrl.branch">
      <option value="">Select Location</option>
    </select>
  </div>
</div>
  • 0
    Спасибо за ответ, однако это все еще не решает мою проблему. Могу ли я знать, как изначально сделать ветку и соответствующее местоположение выбранными при загрузке страницы. Например, я хочу, чтобы «Тестовая ветка 2» и расположение: «Офисная комната 2» были выбраны при загрузке страницы. Обратите внимание, что значение для ветви и местоположения, которые будут выбраны, не является фиксированным, например, это могут быть «Testing Branch 3» и «Office Room 4», которые необходимо выбрать. Спасибо.
  • 0
    Привет @abdul mateen mohammed, вы можете посмотреть на новый / последний вопрос, который я разместил выше, в качестве ответа. Спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню