Я разработал контроллер, который строит таблицу из данных, полученных из бэкэнд через $ http.get.
Я хотел бы знать, как передать значение этому контроллеру из представления, которое указывает, какой URL должен использовать, чтобы получить данные, которые он собирается использовать для построения таблицы.
Как я могу это сделать?
Я пытался это сделать, но он не работает.
HTML:
<div ng-controller = "paginatorController" ng-init = "initilize(1)">
.....
.....
</div>
JS:
demo.factory("ServiceURL", [function() {
return {
url: [
"/privado/usuario/getcoduser",
"/privado/usuario/list"
]
};
}]);
demo.controller( "demoCtrl", ["$http", "$scope", "ServiceURL", function($http, $scope, ServiceURL) {
this.initialize = function( type) {
self.type = type;
//Inside of this function self.type is correctly initialized
}
//But here, self.type is undefined, and gives me an error!!!
$http.get(ServiceURL.url[self.type])
.success(function(response){
//More code
}
}).error(function(response){
//More code
});
}]);
Если то, что я пытаюсь сделать, невозможно, есть ли другой способ делать то, что я хочу?
Я нашел решение:
Я создал внешнюю функцию, в которой я поместил весь свой код контроллера, который строит таблицу, а затем, в контроллере, я вызываю вызов этой функции, передавая правильные параметры, и он отлично работает.
HTML:
<div ng-controller = "demoCtrl1">
.....
.....
</div>
<div ng-controller = "demoCtrl2">
.....
.....
</div>
<div ng-controller = "demoCtrl3">
.....
.....
</div>
JS:
function buildTable($http, $scope, ServiceURL, indexURL){
$http.get(ServiceURL.url[indexURL])
.success(function(response){
//More code
}
}).error(function(response){
//More code
});
}
demo.controller( "demoCtrl1", ["$http", "$scope", "ServiceURL", function($http, $scope, ServiceURL) {
buildTable($http, $scope, ServiceURL.url[1]);
}]);
demo.controller( "demoCtrl2", ["$http", "$scope", "ServiceURL", function($http, $scope, ServiceURL) {
buildTable($http, $scope, ServiceURL.url[2]);
}]);
demo.controller( "demoCtrl3", ["$http", "$scope", "ServiceURL", function($http, $scope, ServiceURL) {
buildTable($http, $scope, ServiceURL.url[3]);
}]);
С помощью этого решения у меня есть возможность иметь больше, чем таблицу, используя только тот же код, а не копировать - вставляя мой код.
В твоем случае,
ng-Init
.ng-init
связан с элементом , но ваш$http.get
находится в конструкторе контроллера .this.initialize
не может быть запущен, пока контроллер не будет сконструирован, и поэтому к моменту$http.get
функцииinitialize
$http.get
уже завершен.