【发布时间】:2014-07-18 04:01:09
【问题描述】:
见下方更新
我有一个 Angular 应用程序,该应用程序在该控制器的页面上有一个控制器和一个指令,它们都引用相同的 firebase 数据(我有充分的理由将它们分开)。当我对一个参考进行更改时,除非我保存数据,否则其他参考不会反映更改。无需保存数据即可更新所有本地 Firebase 引用的最佳方法是什么。我想让用户在保存之前查看他/她的更改会是什么样子。
我有一个可以说明我遇到的问题的 plunker。输入一个输入,在您保存之前,其他输入都不会更新。我希望它们在用户输入时保持同步。
http://jsfiddle.net/dberringer/F7MVB/2/
function MyCtrl($scope, $firebase) {
var ref1 = $firebase(new Firebase("https://fiddler.firebaseio.com/test1"));
ref1.$on('value', function () {
$scope.foo = ref1;
});
$scope.save1 = function () {
ref1.$save();
};
var ref2 = $firebase(new Firebase("https://fiddler.firebaseio.com/test1"));
ref2.$on('value', function () {
$scope.bar = ref2;
});
$scope.save2 = function () {
ref2.$save();
};
$scope.bas = $firebase(new Firebase("https://fiddler.firebaseio.com/test1"));
$scope.saveBas = function () {
$scope.bas.$save();
};
$scope.biz = $firebase(new Firebase("https://fiddler.firebaseio.com/test1"));
$scope.saveBiz = function () {
$scope.biz.$save();
};
}
谢谢!!
更新: 对不起。我应该更清楚。我发布的小提琴只是说明问题的一种快速而肮脏的方式。这是对情况的更准确表示,以及为什么能够在不保存的情况下传播更改会有所帮助。我试图弄清楚是否有一种开箱即用的好方法可以将一个 firebase 引用上的更改传播到另一个 firebase 引用,而无需用户将数据保存到 firebase。也许我需要触发一个方法或一个事件来告诉所有引用更新以匹配 .那会很甜蜜。
如您所见,我所有的模型逻辑都在 myModel 工厂中。我的控制器又好又薄。 my-things 指令可能存在也可能不存在于任何给定页面上,因此该指令直接访问模型,而不是通过控制器的范围。我的控制器不需要为他们可能需要或不需要的指令注入一堆模型。在使用 firebase 时,走这条路感觉非常干净和自然。如果这是不可能的,人们是否有另一种方式来装配模型,与 Firebase 资源交互,这将有助于实现这一点?再次感谢!
http://jsfiddle.net/dberringer/F7MVB/5/
angular.module('myApp',['firebase'])
.factory('myModel', function ($q, $firebase) {
var fbRef = $firebase(new Firebase("https://fiddler.firebaseio.com/"));
return {
getThings: function (id) {
var deferred = $q.defer(),
ref1 = fbRef.$child(id);
// Resolves the promise once the data is loaded from firebase
ref1.$on('loaded', function (data) {
deferred.resolve(ref1);
});
return deferred.promise;
}
}
})
.directive('myThings', function (myModel) {
return {
template: '<div>Hello, {{thingsListB.thing1}}!</div>',
restrict: 'A',
scope: {
elemId: '@myThings'
},
link: function postLink(scope, iElement, iAttr) {
myModel.getThings(scope.elemId).then(function (things) {
scope.thingsListB = things;
});
}
}
})
.controller('myCtrl1', function($scope, myModel) {
myModel.getThings('test1').then(function (things) {
$scope.thingsListA = things;
});
// Something like this might do the trick
// $scope.$watch('thingsListA', function () {
// $scope.thingsListA.$heyIChanged();
// });
})
.controller('myCtrl2', function($scope) {
$scope.foo = 'foo';
});
【问题讨论】:
标签: javascript angularjs firebase angularfire