【发布时间】: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