2014-09-01 2 views
1

공장에서 배열의 값을 읽으려고하지만 그렇게 할 수 없습니다. 나는 NG 그리드를 사용하고 있는데 한 행을 클릭하면 selecteditems 목록을 얻습니다. 다른 컨트롤러에서 전달하는 팩토리 서비스는 매개 변수로 전달하지만 공장의 매개 변수는 배열로 유지하고 읽을 때 전달합니다 그것을 사용하여 인덱스를 비워 보여줍니다. 내 코드는 다음과 같습니다 -anglejs 팩토리에서 배열 값을 읽으 려합니다.

여기 $
myNgApp.controller('MyGrid', ['$scope', function ($scope) { 
    $scope.mySelections = []; 
    $scope.mySelItems = []; 
    $scope.myData = [{ Reference: 12, Customer: "fff", Title: "sd", Task: "Enter Details", Received: "Today", Due: "01/09/2014" }, 
    { Reference: 7899, Customer: "eee", Title: "dsd", Task: "Enter Details", Received: "Yesterday", Due: "05/09/2014" }]; 

    $scope.gridOptions = { 
     data: 'myData', 
     checkboxHeaderTemplate: '<input class="ngSelectionHeader" type="checkbox" ng-model="allSelected" ng-change="toggleSelectAll(allSelected)"/>', 
     selectWithCheckboxOnly: true, 
     showSelectionCheckbox: true, 
     selectedItems: $scope.mySelections, 
     multiSelect: true, 
     columnDefs: [{ field: 'Reference', displayName: 'Reference', width: '*' }, { field: 'Customer', displayName: 'Customer', width: '**' }, { field: 'Title', displayName: 'Title', width: '***' }, { field: 'Task', displayName: 'Task', width: '***' }, { field: 'Received', displayName: 'Received', width: '**' }, { field: 'Due', displayName: 'Due', width: '**' }], 
     showGroupPanel: true, 
     enableCellSelection: false, 
     enableRowSelection: true, 
     enableCellEditOnFocus: false, 
     enablePinning: true, 
     showColumnMenu: true, 
     showFilter: true, 
     enableColumnResize: true, 
     enableColumnReordering: true, 
     maintainColumnRatios: true, 
     afterSelectionChange: function() { 

      angular.forEach($scope.mySelections, function (item) { 
       if ($scope.mySelItems.length == 0) { 
        $scope.mySelItems.push(item.Title) 
       } 
       else { 
        $scope.mySelItems[0] = item.Title 
       } 
      }); 
     } 

    }; 

}]); 


    myNgApp.factory('myPreviewDataService', function() { 

    return function (x) { 

     var arr = [x, "Apple", "Banana", "Orange"]; 

     return arr 
    }; 
}); 

    myNgApp.factory('myPreviewTplService', function() { 
    return function() { 

     return '<div><div class="ngPreviewItems" ng-repeat="item in items">{{item}}</div></div>'; 
    }; 
}); 

myNgApp.directive('showPreview', function ($compile) { 
    return { 
     scope: true, 
     link: function (scope, element, attrs) { 
      var el; 

      attrs.$observe('template', function (tpl) { 
       if (angular.isDefined(tpl)) { 
        // compile the provided template against the current scope 
        el = $compile(tpl)(scope); 

        // stupid way of emptying the element 
        element.html(""); 

        // add the template content 
        element.append(el); 
       } 
      }); 
     } 
    }; 
}); 

myNgApp.controller('myPreviewController', function ($scope, myPreviewDataService, myPreviewTplService) { 
    //$scope.showContent = function() { 

    $scope.items = myPreviewDataService($scope.mySelItems); 
    $scope.template = myPreviewTplService(); 
    //}; 
}); 

scope.mySelItems 우리가 체크 박스를 선택하면 업데이트되는 NG 그리드 컨트롤러입니다. 내가 얻는 것은 배열이지만 내용을 읽을 수 없다. 배열을 표시 할 때 [ "test"]처럼 표시되지만 myPreviewDataService 팩토리 나 $로 읽으려고하면 [0] scope.mySelItems [0] myPreviewController 다음 빈 얻을. 왜 이런 일이 일어나는지 알 수 없습니다.

답변

1

나는 그것을 풀 수 있었다. myPreviewDataService 공장에서 나는

var arr = [x, "Apple", "Banana", "Orange"]; 

var arr = [x, ["Apple"], ["Banana"], ["Orange"]]; 

로 변경하고 나는 그것이 일 {{item[0]}}

{{item}}을 변경 myPreviewTplService 공장에서 배열에 문자열에서 배열 요소를 변경했습니다.

P.S 나는 우리는 또한 myPreviewTplService에서 항목의 유형에 따라 공장을 조건에 따라 NG 스위치를 사용할 수 있다고 생각, 나는 그것을하려고 노력하지만 난 그렇게 할 수 없습니다 내 이전 솔루션했다.