在元素尚未呈现时尝试访问 ng-repeat 元素
Trying to access ng-repeat elements while the elements are not rendered yet
我将使用 WaveSurfer 库创建播放列表。考虑 ng-repeat 的每个元素都是一个 wavesurfer 元素。这是我正在做的事情:
<div ng-repeat="item in items">
<div id="wave{{item.id}}" wavsurfer></div>
</div>
这是我用来将每个 div 元素转换为 wavesurfer 元素的 angular 指令:
app.directive('wavsurfer', function () {
return {
restrict: 'A',
link: function(scope, element, attrs) {
// load wav file
var wavesurfer = WaveSurfer.create({
container: '#'+attrs.id,
waveColor: 'red',
progressColor: 'purple'
});
wavesurfer.load(FileUrl);
}
};});
但我遇到了以下错误,因为该元素尚未在 ng-repeat 中呈现:
Error: Container element not found
你能告诉我正确的方法是什么吗?
<div ng-if="items.length" ng-repeat="item in items">
<div id="wave{{item.id}}" wavsurfer></div>
</div>
ng-if 将在收集项目数组后渲染 ng-repeat div。
您好,请参考以下代码:
看来问题是在你的 ng-repeat 完成之前; wavesurfer 尝试加载它的插件。
请参考以下指令代码:
.directive('wavsurfer', function($timeout) {
return {
restrict: 'A',
scope: {},
link: function(scope, element, attrs) {
var wavesurfer
console.log(attrs.id)
$timeout(function() {
wavesurfer = WaveSurfer.create({
container: '#' + attrs.id,
waveColor: 'red',
progressColor: 'purple'
});
wavesurfer.load('http://ia902606.us.archive.org/35/items/shortpoetry_047_librivox/song_cjrg_teasdale_64kb.mp3');
}, 1000)
}
};
});
工作 fiddle 是 here
同时在此处添加代码段
angular.module("myApp", []).
controller("TreeController", ['$scope', function($scope) {
$scope.items = [{
id: 1,
}, {
id: 2,
}, {
id: 3,
}, {
id: 4,
}];
}]).directive('wavsurfer', function($timeout) {
return {
restrict: 'A',
scope: {},
link: function(scope, element, attrs) {
var wavesurfer;
console.log(attrs.id)
$timeout(function() {
wavesurfer = WaveSurfer.create({
container: '#' + attrs.id,
waveColor: 'red',
progressColor: 'purple'
});
wavesurfer.load('//ia902606.us.archive.org/35/items/shortpoetry_047_librivox/song_cjrg_teasdale_64kb.mp3');
}, 1000)
}
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.0/angular.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.4.0/wavesurfer.min.js"></script>
<div ng-app="myApp" ng-controller="TreeController">
<div ng-repeat="item in items">
<div id="wave{{item.id}}" wavsurfer></div>
</div>
</div>
我将使用 WaveSurfer 库创建播放列表。考虑 ng-repeat 的每个元素都是一个 wavesurfer 元素。这是我正在做的事情:
<div ng-repeat="item in items">
<div id="wave{{item.id}}" wavsurfer></div>
</div>
这是我用来将每个 div 元素转换为 wavesurfer 元素的 angular 指令:
app.directive('wavsurfer', function () {
return {
restrict: 'A',
link: function(scope, element, attrs) {
// load wav file
var wavesurfer = WaveSurfer.create({
container: '#'+attrs.id,
waveColor: 'red',
progressColor: 'purple'
});
wavesurfer.load(FileUrl);
}
};});
但我遇到了以下错误,因为该元素尚未在 ng-repeat 中呈现:
Error: Container element not found
你能告诉我正确的方法是什么吗?
<div ng-if="items.length" ng-repeat="item in items">
<div id="wave{{item.id}}" wavsurfer></div>
</div>
ng-if 将在收集项目数组后渲染 ng-repeat div。
您好,请参考以下代码:
看来问题是在你的 ng-repeat 完成之前; wavesurfer 尝试加载它的插件。 请参考以下指令代码:
.directive('wavsurfer', function($timeout) {
return {
restrict: 'A',
scope: {},
link: function(scope, element, attrs) {
var wavesurfer
console.log(attrs.id)
$timeout(function() {
wavesurfer = WaveSurfer.create({
container: '#' + attrs.id,
waveColor: 'red',
progressColor: 'purple'
});
wavesurfer.load('http://ia902606.us.archive.org/35/items/shortpoetry_047_librivox/song_cjrg_teasdale_64kb.mp3');
}, 1000)
}
};
});
工作 fiddle 是 here
同时在此处添加代码段
angular.module("myApp", []).
controller("TreeController", ['$scope', function($scope) {
$scope.items = [{
id: 1,
}, {
id: 2,
}, {
id: 3,
}, {
id: 4,
}];
}]).directive('wavsurfer', function($timeout) {
return {
restrict: 'A',
scope: {},
link: function(scope, element, attrs) {
var wavesurfer;
console.log(attrs.id)
$timeout(function() {
wavesurfer = WaveSurfer.create({
container: '#' + attrs.id,
waveColor: 'red',
progressColor: 'purple'
});
wavesurfer.load('//ia902606.us.archive.org/35/items/shortpoetry_047_librivox/song_cjrg_teasdale_64kb.mp3');
}, 1000)
}
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.0/angular.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.4.0/wavesurfer.min.js"></script>
<div ng-app="myApp" ng-controller="TreeController">
<div ng-repeat="item in items">
<div id="wave{{item.id}}" wavsurfer></div>
</div>
</div>