Угловой контроллер и методы
Я начинаю в 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, но я не могу понять, как его использовать.
Ответы
Ответ 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, и поэтому каждая служба создается только один раз, поэтому код инициализации в службе запускается только один раз.)