如何从角度为

时间:2016-06-06 07:43:04

标签: javascript angularjs angularjs-scope

当我使用ng-click时,我可以通过id获取html的元素,但是使用ng-init,我得到null。请检查我的笔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>

控制器

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);
  };
}]);

3 个答案:

答案 0 :(得分:5)

你可以通过角度$ timeout获得它,等待角度循环finshed和元素渲染

<强>控制器

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))
        });
    };

}]);

答案 1 :(得分:0)

您无法访问ng-init中的DOM元素,因为此时它们尚未添加到DOM中。无论如何,直接访问角度的DOM元素都是不受欢迎的,所以可能会重新考虑你的代码设计。

有关该指令的适当用法,请参阅https://docs.angularjs.org/api/ng/directive/ngInit

  

ngInit只有少数适​​当用途,例如对ngRepeat的特殊属性进行别名,如下面的演示所示;并通过服务器端脚本注入数据。除了这几种情况,您应该使用控制器而不是ngInit来初始化作用域上的值。

答案 2 :(得分:-1)

这是另一个或多或少回答你问题的讨论。

Getting an element inside ng-init and ng-repeat