【发布时间】:2014-03-29 07:28:18
【问题描述】:
我正在为我的 Angular 网站构建一个“导游”。
我四处寻找选项,Intro.js 似乎是最合适的。它已经准备好 Angular 指令和一切:Angular Intro.js。
一切都按预期进行,直到我不得不向 first(并且只有第一个)添加一个由 ng-repeat 绑定注入的 DOM 对象的步骤。我给所有 ng-repeat 项目一个唯一的 ID(通过 $index),但 Intro.js 只是没有承认它。
我猜 Intro 正在尝试通过指定的 ID 查找 DIV,但由于 ng-repeat 尚未完成,因此没有该名称的 DIV。
我做了一个 plunker,您可以在其中看到它正在处理静态内容,但无法识别 ng-repeat 中的对象。
相关代码:
HTML:
<!-- Works -->
<div id="static">This is static content.</div>
<!-- Doesnt work -->
<div id="item{{$index}}" ng-repeat="item in items">
{{ item.name }}
</div>
角度控制器:
$scope.IntroOptions = {
steps:[
{
element: document.querySelector('#static'),
intro: "This is static content"
},
{
/** ID "item0" belongs to the first element on the ng-repeat **/
element: document.querySelector('#item0'),
intro: "Doesnt work!"
}
],
showStepNumbers: false,
exitOnOverlayClick: true,
exitOnEsc:true,
nextLabel: '<strong>NEXT!</strong>',
prevLabel: '<span style="color:green">Previous</span>',
skipLabel: 'Exit',
doneLabel: 'Thanks'
};
Plunker:http://plnkr.co/edit/kE8P5Kq2Y5CVWEYgyBIo?p=preview
假设上面的原因是它不起作用的原因,我该怎么做 让指令等待 DOM “就绪”?
如果我的假设是错误的,那为什么它不起作用呢?
【问题讨论】:
-
总是在问题中发布相关代码in,不要只是链接。链接烂了。
-
document.querySelector是控制器中的脏代码。创建一个指令来操作 DOM。
标签: javascript jquery angularjs angularjs-directive intro.js