如何避免在页面之间始终调用刷新过程?

时间:2018-08-18 16:25:57

标签: angularjs

我是AngularJS的新手。我有下面的场景

菜单项-主页2页面3页面4

请记住, 主页具有HomeController

Page2具有Page2Controller

Page3具有Page3Controller

Page4具有Page4Controller

每个页面都有其自己的init()函数,用于从服务器获取数据并填充初始数据。

一开始,我必须为每个页面调用不同的过程以为每个页面填充不同的值。

现在我的问题如下:

步骤1:  我已经登录到应用程序,并填充了“主页”值。

步骤2:  我单击了Page2以获取初始数据。

Page3和Page4也是如此。

此时,所有页面都具有初始值。

第3步:

现在,我想返回首页(例如,单击“主页”)。

有什么方法可以检查主页的值吗?

如果主页上有值,我不想调用Init()函数。

是否可以不调用Init()函数?

这个想法是,如果我在第一次调用后不必调用Init()函数,则应用程序会更快。

非常感谢您在这方面的投入。

谢谢

1 个答案:

答案 0 :(得分:-1)

初始化此类数据不是最佳方法。 在这种情况下,您应该使用工厂维修服务。

例如,让我们创建homeService并定义一个类似init的方法,如果该数据不存在,您将在其中生成数据并将其存储在变量中,下次将该方法称为返回变量而不是生成再来一次...

function init () {
    if (initVariable) {
        return initVariable;
    } else {
       // generate init data somehow and save it
       initVariable = generateInitData();
       return initVariable;
    }
}

angularjs中的服务是单例,因此即使您更改页面,也不会丢失initVariable。因此,在控制器init函数中应该做的只是调用此方法。

$ctrl.$onInit = function () {
    $ctrl.initialData = homeService.init();
}

编辑

发送当前代码后,我进行了一些更改以实现我告诉您的概念。只需查看评论

     // define global service variable inside service
     var allInitData = null;

     var getAllInitData = function () {
         var deferred = $q.defer();
         // check if we fetched allInitData already
         if (allInitData) {
           $timeout(function(){
              deferred.resolve(allInitData);
           });
         } else {
            $http.get(baseUrl + "GetInitDataAll")
               .then(function (result) { 
                   // you need to store your result in variable in service
                   allInitData = result;
                   deferred.resolve(result);
               },
               function (result) {
                   deferred.reject(result);
               });
            return deferred.promise;
        };