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
2 ответов
на документация говорит 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();
}]);
Так что действительно нет необходимости использовать ng-init вообще
иногда вы хотите инициализировать что-то, передавая данные в представлении, которые могут использоваться на шаблонной странице, такой как .NET MVC, где вы хотите передать информацию из .NET в angular (контроллер уже имеет данные, и самый простой способ-передать это в ViewBag).
для этого "правильный" способ является окольным и трудно поддерживать, так как вам нужно вставить тег скрипта с фиксированным идентификатором на странице и используйте javascript / jquery, чтобы вытащить данные в область вашего контроллера, снова используя жестко закодированный идентификатор.
в любом случае ломает (ну, kludges) mvw-шаблон углового, поэтому, я думаю, выберите свой яд.