【发布时间】:2018-06-24 06:04:00
【问题描述】:
指令:
app.directive('chatAssistant', chatAssistant);
chatAssistant.$inject = ['$rootScope', '$state'];
function chatAssistant($rootScope, $state) {
return {
link: function() {
let listener = function() {
!(function(g, s, q, r, d) {
r = g[r] = g[r] || function() {
(r.q = r.q || []).push(arguments);
};
d = s.createElement(q);
q = s.getElementsByTagName(q)[0];
d.src = '//placeholder.cloudfront.net/tracker.js';
q.parentNode.insertBefore(d, q);
})(window, document, 'script', '_gs');
_gs('GSN-XXXXXX-N');
if ($state.current.name === 'login' ||
$state.current.name === 'register' ||
$state.current.name === 'forgotPassword' ||
$state.current.name === 'passwordReset') {
_gs('set', 'chat', {button: false});
} else {
_gs('set', 'chat', {button: true});
}
};
$rootScope.$on('$viewContentLoaded', listener);
},
};
}
插入的 HTML:
<div ui-view
chat-assistant>
当包含该指令的 DOM 或 <div> 被加载时,该指令仅运行 Javascript 代码。它工作得很好,但我需要指令在每次路由更改时基本上刷新或重新运行。本质上,它根据您在 if/else 语句中看到的路线显示/隐藏元素。
它目前有效,但您必须手动刷新页面才能重新运行指令并让元素显示您是否在应该显示的页面上。
TLDR:每次路由更改时,我都需要重新运行此指令。
【问题讨论】:
标签: javascript angularjs angularjs-directive