Как передать значение из вида на контроллер в Angular JS?

0

Я разработал контроллер, который строит таблицу из данных, полученных из бэкэнд через $ 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]);

}]);

С помощью этого решения у меня есть возможность иметь больше, чем таблицу, используя только тот же код, а не копировать - вставляя мой код.

  • 1
    это не способ выполнить эту задачу, и не способ использовать ng-Init . ng-init связан с элементом , но ваш $http.get находится в конструкторе контроллера . this.initialize не может быть запущен, пока контроллер не будет сконструирован, и поэтому к моменту $http.get функции initialize $http.get уже завершен.
  • 0
    ХОРОШО. Как я могу передать параметр в мой контроллер, чтобы выбрать тот или иной URL для выполнения в $ http.get?
Показать ещё 5 комментариев
Теги:

1 ответ

1

В твоем случае,

  1. Вы определяете "self.type" внутри функции "initialize()". Поскольку это локально для этой функции, вы не можете получить доступ к этой переменной "self" в методе $ http.get.
  2. Поскольку это вы определяете эту переменную внутри функции, она не будет инициализироваться, если не будет вызвана функция. Поэтому попробуйте инициализировать переменную без помощи функции (может быть внутри контроллера или службы).
  • 0
    Спасибо за ваш ответ, но если я инициализирую self.type вне функции initialize (), она не работает, потому что функция initialize вызывается после конструирования контроллера, а когда конструируется контроллер, это когда метод $ http.get называется, поэтому в этот момент self.type будет неопределенным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню