指令:
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:每当路由更改时,我都需要此指令重新运行。
答案 0 :(得分:0)
每次更改路线时,您都可以在route.js
文件中执行此操作,以调用函数chatAssistant()
。
通过使用resolve,您可以检查用户是否已通过身份验证。
这是简单的演示。:-
route.js
App.config(function($stateProvider, $urlRouterProvider, $locationProvider) {
$urlRouterProvider.otherwise('default');
$stateProvider.
.state('userDashboard', {
url: '/userDashboard',
title: 'User Dashboard',
templateUrl: 'userDashboard.html',
resolve: {
chatAssistant: chatAssistant
},
controller: 'userDashboardController'
})
});
在App.config
外的最后一个位置之后添加功能以调用每个路线更改
var chatAssistant = function($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);
},
};
}