angularjs - oninit - Ng-init a través de la función
ng-init select (2)
Como sabe, es posible inicializar objetos de la siguiente manera:
<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>
¿Es posible definir objetos similares a este pero a través de una función?
<div ng-init="init()">
Mi objetivo es tomar los objetos de una API y mostrarlos en una lista a través de ng-repeat
Entonces, realmente no hay necesidad de usar ng-init en absoluto
A veces querrá inicializar algo pasando datos en la vista, que podría tener su uso en una página con plantilla, como .NET MVC, donde desea pasar información de .NET a angular (el controlador ya tiene los datos y la forma más fácil) es pasar esto en un ViewBag).
Para hacer esto, la forma "correcta" es indirecta y difícil de mantener, ya que tiene que insertar una etiqueta de script con una identificación fija en la página y usar javascript / jquery para obtener los datos en su alcance en su controlador, usando nuevamente el disco duro. ID codificado.
De cualquier manera se rompe (bueno, kludges) el patrón MVW de angular, así que, supongo, elige tu veneno.
La documentación dice que ng-init
tomará cualquier expresión. Entonces sí, puedes hacer lo que quieras arriba siempre que el alcance asociado defina una función llamada init()
(y también lo verifiqué por diversión).
Tenga en cuenta que la documentación dice que ng-init
realidad solo está destinado a usarse para propiedades de alias dentro de una ng-repeat
:
El único uso apropiado de ngInit para aliasar propiedades especiales de ngRepeat, como se ve en la demostración a continuación. Además de este caso, debe usar controladores en lugar de ngInit para inicializar valores en un ámbito.
Finalmente, tenga en cuenta que puede simplemente inicializar sus variables cuando se crea el controlador. Entonces realmente no hay necesidad de usar ng-init
en absoluto. Por ejemplo:
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();
}]);