2015-12-18 49 views
0

我有責任創造一個格子一個指令:

app.directive('gridControl', function() { 
    return { 
     restrict: 'E', 
     scope: { 
      objectType: "=objecttype", 
      gridFields: "=gridfields" 
     }, 
     templateUrl: '/app/templates/modules/gridControl.html', 
     controller: 'gridControlController' 
    }; 
    }); 

控制器是象下面這樣:

standardApp.controller('gridControlController', ["$scope", "$stateParams", "gridControlService", 
function gridformController($scope, $stateParams, gridControlService) { 
    var fields = []; 
    gridControlService.getGridStructure($stateParams.id).then(function (result) { 
     fields = result.data.Fields; 
    }); 
    $scope.mainGridOptions = fields; 
}]); 

時,我想操縱$ scope.mainGridOptions在我看來它是空的!任何人都可以幫我解決它嗎?
*注意:我想給字段數組在$ scope.mainGridOptions之外的函數。

+0

它是空的,因爲這行'$ scope.mainGridOptions = fields;'在服務返回值之前被執行。你爲什麼想要在函數之外填充'$ scope.mainGridOptions'? – Jax

+0

我知道這個問題的原因,但不知道如何解決這個問題。這就是我需要先生,如果你可以給我一個解決方案:) –

回答

0

原因gridControlService.getGridStructure($..一些關於asynchronous。所以對於那js從來沒有持有,直到asynchronous事件完成,而是會執行腳本的其餘部分。因此$scope.mainGridOptions = fields;將在.then(function (result)之前執行,這意味着,fields只是一個空數組。

我認爲$scope.mainGridOptions = fields;沒有必要,你有更好的方法來實現這一點。請嘗試如下

gridControlService.getGridStructure($stateParams.id).then(function (result)  
{ 
    $scope.mainGridOptions = result.data.Fields; 
}); 
// and remove the line $scope.mainGridOptions = fields; 
+0

感謝您的回答,但正如我之前說過的,我想以這種方式設置$ scope.mainGridOptions。 可能嗎? –

+0

因爲您可以刪除'var fields = [];'並添加'$ scope.mainGridOptions = [];' –