2015-11-19 39 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当前卡活动数据检索..

我想我可以在指令的代码中添加手表,但它是唯一的选择吗?

回答

相关问题