Javascript AngularJS在每次路由更改时运行一个指令
指令:Javascript AngularJS在每次路由更改时运行一个指令,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,指令: app.directive('chatAssistant', chatAssistant); chatAssistant.$inject = ['$rootScope', '$state']; function chatAssistant($rootScope, $state) { return { link: function() { let listener = function() { !(function(g, s, q, r, d)
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或包含该指令的
时运行Javascript代码。它工作得很好,但我需要指令在每次路由更改时基本上刷新或重新运行。本质上,它根据您可以在if/else语句中看到的路由显示/隐藏元素
它目前可以工作,但是您必须手动刷新页面,以便重新运行该指令,并获取要显示的元素(如果您位于应该显示该元素的页面上)
TLDR:每次路由更改时,我都需要此指令重新运行。每次路由更改时,您都可以在
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
add函数调用每次路线更改
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);
},
};
}