Подтвердить что ты не робот

Угловой контроллер и методы

Я начинаю в angularjs с несколькими вопросами о контроллерах.
Здесь мой пример контроллера:

function exampleController($scope)
{
   $scope.sampleArray = new Array();

   $scope.firstMethod = function()
   {
      //initialize the sampleArray
   };

   $scope.secondMethod = function()
   {
      this.firstMethod();
   };
};

Вот мои вопросы:

  • Как я могу назвать firstMethod из secondMethod? Я сделал это правильно, или лучше?
  • Как я могу создать конструктор для контроллера? Мне нужно вызвать secondMethod, который вызывает firstMethod, который инициализирует sampleArray?
  • Как я могу вызвать конкретный метод из html-кода? Я нашел ng-initialize, но я не могу понять, как его использовать.
4b9b3361

Ответ 1

Вы вызываете метод так же, как вы его объявили:

$scope.secondMethod = function() {
  $scope.firstMethod();
};

Что вы также можете вызывать из HTML:

<span>{{secondMethod()}}</span>

Но у контроллеров действительно нет "конструкторов" - они обычно используются точно так же, как и функции. Но вы можете разместить инициализацию в своей функции контроллера, и она будет выполнена изначально, как конструктор:

function exampleController($scope) {
  $scope.firstMethod = function() {
    //initialize the sampleArray
  };

  $scope.secondMethod = function() {
    $scope.firstMethod();
  };

  $scope.firstMethod();
}

Ответ 2

вы вызываете первый метод с помощью $scope.

So

   $scope.secondMethod = function()
   {
      $scope.firstMethod();
   };

Не уверен, что вы имеете в виду в своем втором вопросе.

Для вашего третьего quesiton вы можете либо запустить автоматический запуск "onload" на контроллере, либо запустить его с помощью интерфейсного связывания angular.

например. Автоматически запускать

function exampleController($scope)
{
   $scope.sampleArray = new Array();

   $scope.firstMethod = function()
   {
      //initialize the sampleArray
   };

   $scope.secondMethod = function()
   {
      $scope.firstMethod();
   };


   $scope.secondMethod(); // runs automatically.

};

Запуск при привязке

<div ng-controller="ExampleController"> <!-- example controller set up in namespace -->

<button class="btn" ng-click="secondMethod()">Run Second Method</button>

</div>

Ответ 3

@Josh и @Кристофер уже рассмотрели ваши вопросы, поэтому я не буду повторять это.

Я нашел ng-initialize, но я не знаю, как это использовать: - (

Директива фактически ng-init. Иногда (например, если вы начинаете использовать Angular в некоторых частях приложения, и вам все равно необходимо динамически генерировать сервер просмотра/HTML-страницы), ng-init иногда может быть полезным способом инициализации. Например.

<div ng-controller="ExampleCtrl">
   <form name="myForm">
     <input type="text" ng-model="folder" ng-init="folder='Bob'">

Вот пример, когда кому-то нужно было использовать ng-init: rails + angularjs загружать значения в текстовые поля при редактировании

Я также хотел бы упомянуть, что контроллеры не являются одиночными. Если вы используете ng-view, каждый раз, когда вы переходите на другой маршрут, создается новый контроллер. Контроллер, связанный с видом, который вы оставляете, будет уничтожен, и контроллер, связанный с просмотром, который вы собираетесь выполнить, будет выполнен. Так что "код инициализации" в контроллере может выполняться несколько раз во время работы приложения. Например, если вы заходите на страницу, перейдите в другое место, затем вернитесь, то одна и та же функция контроллера (и ее "код инициализации" ) будет выполнена дважды.

Если вы хотите что-то действительно запустить один раз, поместите его в службу или в module config() или запустите() методы. (Сервисы singletons, и поэтому каждая служба создается только один раз, поэтому код инициализации в службе запускается только один раз.)