【问题标题】:factory not working properly工厂无法正常工作
【发布时间】:2015-10-21 08:55:29
【问题描述】:

我有一个工厂问题,一旦调用“HomeController”就会调用它,问题是这也会向 api 发出 xhr 请求,但结果似乎被缓存或其他东西,在某种程度上我第二次去家庭控制器,它没有提出另一个请求,它应该。 事实上,应用程序 console.log("HomeController") 工作得很好,每当我进入主页时都会调用它,但是工厂内的第二个 console.log 只调用一次 .

代码如下:

app.controller("HomeController",function($scope,home_page,check_login,$rootScope){
    console.log("HomeController");

    $scope.home_json = {};

    home_page.success(function(data, status){
          $scope.home_json = data;
          console.log(data);
    });
});


app.factory('home_page', ['$http', function($http){
    console.log("/libs/home.php?date="+Date.now());
    return $http.get("/libs/home.php?date="+Date.now());        
}]);

【问题讨论】:

    标签: angularjs factory


    【解决方案1】:

    工厂返回单例。所以这实际上是预期的行为。

    您应该返回一个对象来公开执行 ajax 调用的方法,而不是在工厂执行期间执行它。

    【讨论】:

      【解决方案2】:

      所以工厂确实像单例一样。所以你每次都访问同一个实例。要改变这种行为:

      app.factory('home_page', ['$http', function($http){
          var service = {
             getHome: getHome
          };
      
          return service;
      
          function getHome() {
              console.log("/libs/home.php?date="+Date.now());
              return $http.get("/libs/home.php?date="+Date.now());        
          }
      }]);
      

      这现在是创建一个在调用实例时要返回的对象,每次都是同一个实例。但是现在您可以在 objectgetHome 上调用 function,这将在每次调用时执行 XHR 请求。

      然后调用函数稍作改动:

      home_page.getHome().success(function(data, status){
          $scope.home_json = data;
          console.log(data);
      });
      

      注意home_page.getHome(),所以现在您正在调用从服务返回的对象上的函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-01
        • 1970-01-01
        • 2016-09-01
        • 2012-07-11
        • 2018-04-08
        • 2017-04-20
        • 2018-10-02
        • 2016-09-04
        相关资源
        最近更新 更多