javascript angularjs angularjs-scope

javascript - ng-init select



Cómo obtener elemento html por Id pasado desde ng-init de angular (3)

Pude obtener el elemento de html por id cuando uso ng-click, pero con ng-init obtengo nulo. por favor revisa mi pluma http://codepen.io/solidet/pen/pbJMjq

html

<script type="text/javascript"> var memId = "bb7de28f-0f89-4f14-8575-d494203acec7"; </script> <div ng-app="myapp" ng-controller="MainCtrl" ng-init="getMember(memId)"> <span id="audio-{{memId}}"> Your mem ID: {{memId}} </span> <span ng-click="getMember(memId)"> click me <span> </div>

Controlador

var app = angular.module(''myapp'', []); app.controller(''MainCtrl'', [''$scope'', ''$window'', function($scope, $window) { $scope.memId = $window.memId; $scope.getMember = function(id) { console.log(id); var voice = document.getElementById(''audio-''+ id); console.log(voice); }; }]);


No puede acceder a los elementos DOM en ng-init ya que aún no se han agregado al DOM en este momento. El acceso directo a los elementos DOM en angular está mal visto de todos modos así que tal vez reconsidere el diseño de su código.

Ver https://docs.angularjs.org/api/ng/directive/ngInit para los usos apropiados de esa directiva.

Solo hay unos pocos usos apropiados de ngInit , como para ngRepeat propiedades especiales de ngRepeat , como se ve en la demostración a continuación; y para inyectar datos a través de secuencias de comandos del lado del servidor. Además de estos pocos casos, debe usar controladores en lugar de ngInit para inicializar valores en un ámbito.


puede obtenerlo a través de $ agotado angular, que es esperar hasta que finalice el ciclo angular y los elementos renderizados

controlador

var app = angular.module(''myapp'', []); app.controller(''MainCtrl'', [''$scope'', ''$window'', ''$timeout'', function($scope, $window, $timeout) { $scope.memId = $window.memId; $scope.getMember = function(id) { $timeout(function() { console.log(document.querySelector(''#audio-'' + id)) }); }; }]);