gpt4 book ai didi

javascript - IntroJS 添加指令到步骤标记

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:28:31 26 4
gpt4 key购买 nike

我正在使用 introJS 来获取用户指南。我可以展示各种功能,但是,我想在标记中添加一个指令,例如:

$scope.IntroOptions = {
steps: [
{
element: "#step1",
intro: "Click the button: <button my-directive>Test Directive</button>",
position: 'left'
}
],

通过上面的代码,我可以看到文本“单击按钮”以及一个默认按钮。

myDirective.js

var myDirective = function () {
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.bind('click', function() {
console.log('you clicked the directive');
});
}
};
};

return [myDirective];

不过,有了上面的。 console.log 从未显示,但当我检查标记时,我可以看到:

<button my-directive>Test Directive</button>

如果我将指令放在应用程序的任何其他位置,console.log 就会成功。

最佳答案

也许这可以帮到你。

我已经尝试实现@S.Klechkovski 的解决方案 here ,它对我来说失败了。但是让任何人试验一下。

但实际上,我做了你想要的东西here :

function appCtrl($scope, $compile) {

function onIntroAfterChange(targetElement, scope) {

angular.element(document.querySelector(".introjs-tooltiptext"))
.append($compile(
angular.element(
"<button my-directive>Test Directive</button>"))
(scope)).html()
}

$scope.onIntroAfterChange = onIntroAfterChange;

$scope.IntroOptions = {
steps: [{
element: "#step1",
intro: "Click the button:",
position: 'bottom'
}]
};
}

(提示是使用 ng-intro-onAfterChange 在适当的范围内编译)不好的部分是我在那里对模板进行了硬编码。

但是您可以更进一步,将模板设置为要在其上显示工具提示的元素的属性。无法访问步骤的 intro 字段。所以...对编码色情的极端水平感到抱歉 here (它似乎在工作):

完整的 JS:

angular.module("app", ["angular-intro"])
.directive("myDirective", myDirective)
.controller("appController", appCtrl);

function myDirective() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
element.bind('click', function() {
console.log('you clicked the directive');
});
}
};
};



function appCtrl($scope, $compile) {

function onIntroAfterChange(targetElement, scope) {
angular.element(document.querySelector(".introjs-tooltiptext"))
.append($compile(
angular.element(targetElement).attr("data-template"))
(scope)).html()
}

$scope.onIntroAfterChange = onIntroAfterChange;

$scope.IntroOptions = {
steps: [{
element: "#step1",
intro: "Click the button:",
position: 'bottom'
}]
};
}

完整的 HTML

<body ng-app="app" ng-controller="appController">
<div ng-intro-options="IntroOptions" ng-intro-autostart="true" ng-intro-onafterchange="onIntroAfterChange">
<p id="step1" data-template="<button my-directive>Test Directive</button>">
Text
</p>
<button my-directive>Test Directive</button>

备注:here是一个可怕的提示,您可能需要使用 $timeout 将代码包装在 onIntroAfterChange 中。希望你不需要它

PS:实际上问题是我们使用的是 AngularJS 的 IntroJS。库有完全不同的方法,所以混合它们很痛苦。

PPS:希望有人能提供比我更好的解决方案。

PPS:最好的解决方案是使用 Angular 指令重写 introJS

关于javascript - IntroJS 添加指令到步骤标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37055468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com