2014-07-09 74 views
0

我有一個簡單的問題,我似乎無法弄清楚。我是angular.js的新手,正在嘗試ui.router。我的web應用程序是一個顯示JSON數據的表格。

列是單個JSON對象中的所有鍵,行是每個相應鍵的值。我想做類似如下的事情:

go to www.xyz.com/keyname, 

並查看keyname的所有值。

但是,我被困在試圖獲得鑰匙。

這些按鍵是在通過工廠傳遞數據的控制器中定義的。然後我想我會這樣做:

var app = angular.module('SortingTables', ['ui.bootstrap', 'ui.router']); 


app.factory('dataTable', function() { 
      return tastyJSONData; 
     }); 

app.controller('Ctrl', ['$scope', 'dataTable', function ($scope, dataTable) { 
    $scope.dataTable = dataTable; 
    $scope.columns = the keys in dataTable; 
}]); 

app.config(['$stateProvider', '$urlRouterProvider',function ($stateProvider,$urlRouterProvider) { 

    // pseudocode 

    for every column in $scope.columns in Ctrl 
     $stateProvider.state(column)... 
}]); 

但是,我不能訪問包含數據的控制器內的作用域。我錯過了什麼嗎?

該配置在工廠之前運行,所以如何訪問工廠在我的配置中所做的數據?

回答

0

我認爲最好的做法是保持控制器內的所有邏輯。也許去的東西沿着線:

app.controller('Ctrl', ['$scope', '$stateProvider', 'dataTable', function ($scope, $stateProvider, dataTable) { 
    $scope.dataTable = dataTable; 
    $scope.columns = the keys in dataTable; 

    // pseudocode 

    for every column in $scope.columns 
     $stateProvider.state(column)... 
}]); 

然後你只需將配置用於路由目的

app.config(['$urlRouterProvider',function ($urlRouterProvider) { 

    //routing 
}]); 

很難肯定地說沒有完整的代碼。希望這可以幫助!

0

我認爲定義顯式狀態會讓事情比需要的更難。

嘗試這樣:

.state('keys', { 
    url: '/', 
    resolve: { 
     keys: ['$http', function($http { 
      return $http.get('/api/keys'); 
     }] 
    }, 
    controller: function($scope, keys) { 
     $scope.allKeys = keys; 
    } 
}) 

.state('keys.detail', { 
    url: '/:keyname', 
    controller: function($scope, $stateParams) { 
     $scope.keyname = $stateParams.keyname; 
    } 
}) 

和你的 '鑰匙' 狀態類似的觀點:

<li ng-repeat="keyname in allKeys"> 
    <a ui-sref="keys.detail({keyname: keyname})">{{ keyname }}</a> 
</li>