2015-11-19 50 views
0

這是此問題的延續Get other columns from select ng-options指令的代碼在獲取數據之前觸發

我的指令存在問題。第一個問題是,通過表格的第一個初始加載,我可以正確看到部門和類別,但項目顯示'選擇項目'而不是項目。第二個問題是,當我導航到列表中的另一行時,初始值沒有顯示(例如,所有內容都顯示'選擇部門','選擇類別','選擇項目'而不是值。我確認在這種情況下我沒有檢索該行的數據尚未所以,我需要運行指令的代碼只後,我得到了我的數據

我怎樣才能解決我的問題

下面是指導整個代碼:?

(function() { 
 
    'use strict'; 
 

 
    var app = angular.module('sysMgrApp'); 
 

 
    app.directive('smDci', ['departmentService', 'categoryService', 'itemService', smDci]); 
 

 
    function smDci(departmentService, categoryService, itemService) { 
 

 
     var directive = { 
 
      restrict: 'E', 
 
      scope: { 
 
       selectedDepartmentId: '=?departmentid', 
 
       selectedCategoryId: '=?categoryid', 
 
       selectedItemId: '=itemid', 
 
       selectedDci: '=?dci' 
 

 
      }, 
 
      controller: ['$scope', 'departmentService', 'categoryService', 'itemService', 
 
       function ($scope, departmentService, categoryService, itemService) { 
 
       $scope.selectedDepartmentId = $scope.selectedDepartmentId || 0; 
 
       $scope.selectedCategoryId = $scope.selectedCategoryId || 0; 
 
       $scope.selectedItemId = $scope.selectedItemId || 0; 
 
       $scope.selectedDci = $scope.selectedDci || '';     
 
       
 
       var init = function() { 
 
        $scope.metaData = {}; 
 
        window.console && console.log('Selected departmentId = ' + $scope.selectedDepartmentId + 
 
         ' Selected categoryId = ' + $scope.selectedCategoryId + ' Selected ItemId = ' + $scope.selectedItemId); 
 
        departmentService.getAllDepartments().then(function (data) { 
 
         $scope.metaData.departments = data.departments; 
 
         //window.console && console.log('Got all departments...') 
 
        }); 
 
        if ($scope.selectedDepartmentId == 0 && $scope.selectedCategoryId == 0 && $scope.selectedItemId != 0) { 
 
         itemService.getItemById($scope.selectedItemId).then(function (data) { 
 
          var item = data.item; 
 
          if (item != null) { 
 
           $scope.selectedItem = item; 
 
           $scope.selectedDepartmentId = item.departmeId; 
 
           $scope.selectedCategoryId = item.categoryId; 
 
           
 
           window.console && console.log('Initial selections are about to fire...') 
 
           getInitialSelections(); 
 
          } 
 

 
         }); 
 
        } 
 
        else { 
 
         getInitialSelections(); 
 
        } 
 
       }; 
 

 
       var getInitialSelections = function() 
 
       { 
 
        if ($scope.selectedDepartmentId != 0) { 
 
         $scope.departmentChanged($scope.selectedDepartmentId); 
 
        } 
 
        if ($scope.selectedCategoryId != 0) { 
 
         $scope.categoryChanged($scope.selectedCategoryId); 
 
        } 
 
       } 
 

 
       $scope.departmentChanged = function (departmentId) { 
 
        if (!departmentId) { 
 
         $scope.selectedCategoryId = ''; 
 
         $scope.selectedItemId = ''; 
 
         $scop.selectedItem = {}; 
 
         $scope.selectedDci = ''; 
 
        } 
 
        else 
 
        { 
 
         categoryService.getCategoriesByDepartmentId(departmentId).then(function (data) { 
 
          $scope.metaData.categories = data.categories; 
 
          //window.console && console.dir($scope.selectedItem); 
 
         }); 
 
        } 
 
       }; 
 

 
       $scope.categoryChanged = function (categoryId) { 
 
        if (!categoryId) { 
 
         $scope.selectedItemId = ''; 
 
         $scope.selectedItem = null; 
 
         $scope.selectedDci = ''; 
 
        } 
 
        else 
 
        { 
 
         itemService.getItemsByCategoryId(categoryId).then(function (data) { 
 
          $scope.metaData.items = data.items; 
 
         }); 
 
        } 
 
       }; 
 

 
       $scope.itemChanged = function(item) 
 
       { 
 
        $scope.selectedItemId = item.itemId; 
 
        $scope.selectedDci = item.department + item.category + item.item; 
 
       } 
 

 
       init(); 
 
      }], 
 
      templateUrl: 'app/templates/smDci' 
 
     }; 
 
     return directive; 
 
    } 
 
})();

和HTML:

<div class="row"> 
 

 
    <label class="control-label col-md-2" title="@Labels.dci">@Labels.dci:</label> 
 
    
 
    <div class="col-md-3"> 
 
     <select class="form-control" ng-model="selectedDepartmentId" name="department" id="department" 
 
       ng-options="d.departmeId as d.descrip for d in metaData.departments" 
 
       data-no:dirty-check 
 
       ng-change="departmentChanged(selectedDepartmentId)"> 
 

 
      <option value="">@String.Format(Labels.selectX, Labels.department)</option> 
 
     </select> 
 
    </div> 
 
    <div class="col-md-3"> 
 
     <select class="col-md-3 form-control" ng-model="selectedCategoryId" id="category" name="category" 
 
       ng-disabled="!selectedDepartmentId" 
 
       data-no:dirty-check 
 
       ng-change="categoryChanged(selectedCategoryId)" 
 
       ng-options="c.categoryId as c.descrip for c in metaData.categories | filter: {departmeId:selectedDepartmentId}"> 
 
      <option value="">@String.Format(Labels.selectX, Labels.category)</option> 
 
     </select> 
 
    </div> 
 
    <div class="col-md-3"> 
 
     <select class="col-md-3 form-control" ng-model="selectedItem" id="item" name="item" 
 
       ng-disabled="!selectedCategoryId" 
 
       ng-change="itemChanged(selectedItem)" 
 
       ng-options="c as c.descrip for c in metaData.items | filter: {departmeId:selectedDepartmentId, categoryId:selectedCategoryId}"> 
 
      <option value="">@String.Format(Labels.selectX, Labels.item)</option> 
 
     </select> 
 
     <div class="field-validation-error"> 
 
      <span ng-show="item.$error.required">@String.Format(Messages.isRequired, Labels.item)</span> 
 
     </div> 
 
    </div> 
 
</div> 
 
<div class="clearfix"></div>

這是我如何使用它的形式:

<data-sm:dci itemid="currentCardAct.itemId" dci="currentCardAct.dci"></data-sm:dci>

使用記錄來安慰我可以看到我需要後檢索到的卡數據,例如在控制檯我看到

選定DepartmentID的= 0選擇的categoryId = 0選擇的項目Id = 0 CardActController.js:檢索221個當前的卡活動數據.. smDci.js:28選擇DepartmentID的= 0選擇的categoryId = 0選擇的項目Id = 0 CardActController.js:221當前卡活動數據檢索..

我想我可以在指令的代碼中添加手錶,但它是唯一的選擇嗎?

回答

相關問題