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 parangRepeat
propiedades especiales dengRepeat
, 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))
});
};
}]);
Aquí hay otra discusión que más o menos responde su pregunta.