Ng-init через функцию
Как вы знаете, можно инициализировать объекты следующим образом:
<div ng-init="friends = [{name:'John', phone:'555-1276'},
{name:'Mary', phone:'800-BIG-MARY'},
{name:'Mike', phone:'555-4321'},
{name:'Adam', phone:'555-5678'},
{name:'Julie', phone:'555-8765'},
{name:'Juliette', phone:'555-5678'}]"></div>
Можно ли определить объект, подобный этому, но через функцию:
<div ng-init="init()">
Моя цель - фактически взять объекты из API и показать их в списке через ng-repeat
Ответы
Ответ 1
В документации говорится, что ng-init
примет любое выражение. Итак, да, вы можете делать то, что хотите выше, если связанная область определяет функцию с именем init()
(и я также проверил ее для удовольствия).
Обратите внимание, что в документации указано, что ng-init
действительно предназначен только для использования для свойств псевдонимов внутри ng-repeat
:
Единственное соответствующее использование ngInit для сглаживания специальных свойств ngRepeat, как показано в демонстрации ниже. Помимо этого случая, вы должны использовать а не ngInit для инициализации значений в области.
Наконец, обратите внимание, что вы можете просто инициализировать свои переменные при создании контроллера. Поэтому нет необходимости использовать ng-init
вообще. Например:
var myApp = angular.module('myApp', []);
myApp.controller('myController', ['$scope', function($scope){
$scope.init = function() {
$scope.a = 'Apples';
$scope.b = 'Bees';
$scope.c = 'Zebras';
};
// runs once per controller instantiation
$scope.init();
}]);
Ответ 2
Поэтому нет необходимости вообще использовать ng-init
Иногда вам нужно инициализировать что-то, передавая данные в представлении, которое может иметь свои применения на шаблонизированной странице, например .NET MVC, где вы хотите передавать информацию с .NET на angular (у контроллера уже есть данные и самый простой способ - передать это в ViewBag).
Для этого "правильный" способ обходной и трудноподдерживаемый, так как вам нужно вставить тег script с фиксированным ID на странице и использовать javascript/jquery, чтобы вытащить данные в вашу область в вашем контроллере, снова используя жестко запрограммированный идентификатор.
В любом случае ломается (ну, kludges) MVW-шаблон angular, поэтому, я думаю, заберите свой яд.