Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS在每次路由更改时运行一个指令_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

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);
    },
  };
}