javascript - AngularJS - 无法获取在指令的 TemplateUrl 中使用 Promise 的工厂方法的解析值

标签 javascript angularjs asynchronous angularjs-directive promise

我正在开发一个非常模块化的项目,目前我正在构建一个Element Directive,它根据用户登录/注销更改templateUrl >。

为此,我尝试在 templateUrl 内执行Factory's Function。该特定函数从 JWT Factory 调用另一个方法,如果用户已登录则返回 true,如果没有登录则返回 false

然后,如果在我的 templateUrl 中收到 true,我会选择某个 url,如果 false 则选择另一个一个。

但是,遗憾的是,我收到以下错误:

[$http:badreq] Http request configuration url must be a string. Received: {}

所有$log.log()打印出正确的结果。

当然,它不会渲染,也不会渲染 page1page2

指令

(function () {
  'use strict';

  angular
    .module('myApp')
    .directive('myDirective', ['SessionCheckerFactory',  function (SessionCheckerFactory) {

      return {
        restrict: 'E',
        templateUrl : function(){
          return SessionCheckerService.checkSession().then( function (res) {
            console.log(res);//true
            return res ? 'app/page1.html' : 'app/page2.html';
      });
        },
        controller       : 'MyController',
        controllerAs     : 'myCtrl',
        bindToController : true

      };
    }]);
})();

SessionCheckerFactory

(function () {
  'use strict';

  angular
    .module('myApp')
    .factory('SessionCheckerFactory', function (AuthTokenFactory) {

      function checkSession() {
          return AuthTokenFactory.isAuth();
      }          

      return {
        checkSession: checkSession
      }

    });
})();

AuthTokenFactory

(function() {
  'use strict';

  angular.module('myApp')
  .factory('AuthTokenFactory', function AuthTokenFactory(store, $cookies) {

      //Takes user's info from LocalStorage, if not empty returns a String with encoded string informations
      function getToken() {
       if (store.get(key)) {
         return store.get(key);
       }
        //Takes user's info from cookie
        var token = $cookies.get('token', {path: '/'});
        store.set(key, token);

        return token;
      }

      //If getToken is empty returns false, else true
      function isAuth() {
        return Promise.resolve(Boolean(getToken()));
      }

      return { 
              isAuth   : isAuth,
              getToken : getToken
      }
 });
})();

我了解到这个问题通常是由 $http 请求生成的,但这不是我的情况。到目前为止我还没有找到任何解决方案。

如何解决这个问题?

提前致谢。

最佳答案

Then, If in my templateUrl I receive true, I pick a certain url, if false another one.

事实上你不知道。如果您收到true,则选择一个网址,如果收到某个真实值,则选择另一个网址,如果收到虚假值,则不选择任何网址:

 if (res) {
     if (res === true) {
         return resolve('app/page1.html');
     } // else
         return resolve('app/page2.html');
 }
 // else return undefined;

你可能想要

templateUrl : function(){
    return SessionCheckerFactory.checkSession().then(function (res) {
        if (res) {
            return 'app/page1.html';
        } else {
            return 'app/page2.html';
        }
    })
},

关于javascript - AngularJS - 无法获取在指令的 TemplateUrl 中使用 Promise 的工厂方法的解析值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39343007/

相关文章:

javascript - JQuery悬停在下拉菜单上闪烁

javascript - 如何对服务中调用的过滤器进行单元测试

javascript - 异步函数和 Readline 使用

javascript - 如何为我的案例创建响应式设计中的动画?

javascript - Rails 4 - 带有 gmaps4rails gem 的 Google map

javascript - After Effects 应用预设 : bad path

android - Cordova /Phonegap : Live update codebase

javascript - AngularJS 从 SQLite 数据库中填充选择下拉列表

wpf - WPF异步验证的最佳做法?

ios - 在 iOS 中嵌套 block