【问题标题】:Angular: Updating scope with factory serviceAngular:使用工厂服务更新范围
【发布时间】:2016-01-12 21:10:19
【问题描述】:

我目前在使用工厂服务和 AngularFire 更新范围时遇到问题。我认为代码不言自明:

//Creates firebase object based on URL ($stateParams as an ID)
jobControllers.factory('Job', getJobService);
function getJobService($firebaseObject, $stateParams) {
   var ref = new Firebase("<my firebase url>" + $stateParams.jobId);
       return $firebaseObject(ref);
}

//Sets Scope to firebase object in getJobService
jobControllers.controller('JobCtrl', function ($scope, $location, Job) {
    $scope.job = Job;
});

这很好用,当您单击 /jobs/:jobId/ 之类的链接时,它会加载正确的数据。问题是,一旦您返回 /jobs/ 并单击另一个 :jobId,数据将保持不变。我相当确定问题是我的 firebase URL 保持不变,并且 $stateParams 在控制器加载时没有改变,因此数据使用 URL 用于单击的第一个项目。如果是这种情况,如何更改我的工厂以获取参数,以便在控制器中将正确更新的 $stateParams 传递给它?

我以前在控制器中调用我的firebase对象时没有这个问题:

jobControllers.controller('JobCtrl', function ($scope, $location, $stateParams, $firebaseObject) {
  var ref = new Firebase("<my firebase url>" + $stateParams.jobId);
  $scope.job = $firebaseObject(ref);
});

我之所以使用工厂,是因为我不喜欢我在每个不同的控制器中定义 firebase URL 的方式,所以我想为此创建一个可重用的服务。如果有更好的方法 - 请提出建议。

编辑:感谢 charlieftl

function getFireBaseService($firebaseArray, $firebaseObject) {
  return {
    getArray: function(url) {
      var ref = new Firebase("https://<my-app>.firebaseio.com" + url);
      return $firebaseArray(ref);
    },
    getObject: function(url) {
      var ref = new Firebase("https://<my-app>.firebaseio.com" + url);
      return $firebaseObject(ref);
    }
  }
}

【问题讨论】:

    标签: javascript angularjs parameters angularfire


    【解决方案1】:

    问题是工厂是一个单例并且只初始化一次。您的方法只会使用 $stateParams.jobId 初始化时的任何值

    使用函数返回 firebase 对象,以便每次调用时都会运行它

    function getJobService($firebaseObject, $stateParams) {
    
        function getJob() {
            var ref = new Firebase("<my firebase url>" + $stateParams.jobId);
            return $firebaseObject(ref);    
        }
        //return object from factory
        return {
            getJob: getJob
        }
    }
    

    然后在控制器中

     $scope.job = Job.getJob();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多