1

我对 Angular 很陌生,在配置 IdleProvider 和 KeepaliveProviders 时遇到问题。请理解这个问题:我已经正确配置了这两个提供程序,并且我的空闲超时正在工作。我正在寻找的是如何提供值通过从属性文件中读取这些值来发送给这些提供者。我已经能够从属性文件中读取值,但我无法在我的 .config() 方法中将它们传递给提供者。

我正在使用 angular 1.4.3(请不要让我升级 - 我刚刚加入了一个他们正在使用它的项目。

这是我在 route.js 中的配置方法

define(['app'], function(app) {
  'use strict';
  return app

    .config(function($stateProvider, $urlRouterProvider, $httpProvider, KeepaliveProvider, IdleProvider) {
    console.log("Idle timer is here")
    IdleProvider.idle(5); //Rather than hardcoding, I want to pass from a property file
    IdleProvider.timeout(5); //Rather than hardcoding, I want to pass from a property file. 
    KeepaliveProvider.interval(10); //Same here - pass from a property file

我有一个服务类,我在其中读取我的属性文件并将结果设置在 $sessionStorage 但我无法将 sessionStograge 注入上面的 .config(..) 方法,因为您只能将常量和提供程序注入 .config( ..)。任何帮助,将不胜感激!

auth.getRedirectUrls2 = function() {
    console.log("getRedirectUrls2 has been caled!!");
    var promise = $http.get("resources/sessiontimeout.properties")
        .then(function(response) {
            console.log("In getRedirectUrl2 response is: ", response.data);
            console.log("Is the damn data in the session or not: ", $sessionStorage.redirectprops);
            $sessionStorage.redirectprops = response.data;
            return response.data;
        })
        .catch(function(response) {
            console.error('Gists error', response.status, response.data);
        })
        .finally(function() {
            console.log("In getRedirectUrls2 - Finally, all is done!!");
        });
    $sessionStorage.redirectpromise = promise;
    console.log("The promise is: ", promise);
    console.log("The promise from session is: ", $sessionStorage.redirectpromise);
    return promise;
};

=======编辑了后续问题====

  1. 我有以下项目结构,但不知道在哪里创建提供程序。webapp/静态/app/js

    • 控制器(这里的所有控制器)
    • 指令者(这里的所有指令)
    • 服务(这里的所有服务)
  2. 另外,我可以像这样在提供者构造函数中创建 tryConstant.layouts.idleTime 吗?

    • layout.idleTime=xyz
    • layout.intervalTime=abc
  3. 我在哪里注入 $sessionStorage 或提供程序中的服务?

4

3 回答 3

1

您应该创建一个提供程序并在配置中使用提供程序,您可以在提供程序中使用服务和 sessionStograge,您可以在配置中使用提供程序。

以下是提供者的示例:

(function() {
    'use strict';

    angular
        .module('app')
        .run(layoutRunner)
        .provider('tryConstant', constantProvider);

    function constantProvider() {
        var layout = {};
    }
    function constanntRunner() {
        // check for $stateChangeStart and update the layouts if we have data.layout set
        // if nothing set reset to defaults for every state
        var destroyOn = $rootScope.$on('$stateChangeStart');
        $rootScope.$on('$destroy', removeWatch);

        function removeWatch() {
            destroyOn();
        }
    }
})();

您可以在此处使用会话存储和所有内容,并更新布局对象中的值。并在配置中使用它如下

.config(function($stateProvider, $urlRouterProvider, $httpProvider, KeepaliveProvider, IdleProvider,tryConstant ) {
    console.log("Idle timer is here")
    IdleProvider.idle(tryConstant.layouts.idleTime);
}
于 2018-02-16T05:52:17.277 回答
0

我有相同的场景并使用工厂提供者解决了它,如下所示:

angular.module()
.factory("myFun", ['$http',
   function($http){
     return {
       getAppIdleDuration: function() {
         return $http.get("/api/property/getAppIdleDuration")
                .then(function(response) {
                   return response.data;
         });
       },
       getAppIdleTimeout: function() {
        return $http.get("/api/property/getAppIdleTimeout")
               .then(function(response) {
                 return response.data;
        });
       }
     };
   }
 ]).config(function(IdleProvider, KeepaliveProvider,myFunProvider) {
    myFunProvider.$get().getAppIdleDuration().then(function(data){
        console.log(" ++++++ getAppIdleDuration "+data);
        IdleProvider.idle(data); // in seconds
    });
    myFunProvider.$get().getAppIdleTimeout().then(function(data){
         console.log(" ++++++ getAppIdleTimeout "+parseInt(data));
         IdleProvider.timeout(parseInt(data)); // in seconds
    });
})

中的配置application.properties

app.ui.idle.duration=5
app.ui.idle.timeout=10

这里 /api/property/getAppIdleDuration 和 /api/property/getAppIdleTimeout http 调用分别返回上述属性。

于 2021-09-27T14:34:49.450 回答
0

由于此更改,您可以在配置服务后使用空闲服务上的setIdle和函数来更改这些值。setTimeout

于 2020-09-17T18:16:12.207 回答