我正在开发一个非常模块化的项目,目前我正在构建一个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()
打印出正确的结果。
当然,它不会渲染,也不会渲染 page1
和 page2
指令
(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/