【发布时间】:2014-03-22 06:16:45
【问题描述】:
我对 Angular 还是很陌生,我使用 firebase 作为我的后端。我希望有人可以调试这个问题。当我第一次访问我的页面 www.mywebsite.com/#defaultHash 时,数据不会加载到 DOM 中,但它会在访问另一个哈希链接并返回后加载。
我的控制器是这样的:
/* initialize data */
var fb = new Firebase('https://asdf.firebaseio.com/');
/* set data to automatically update on change */
fb.on('value', function(snapshot) {
var data = snapshot.val();
$scope.propertyConfiguration = data.products;
console.log($scope.propertyConfiguration);
console.log("Data retrieved");
});
/* save data on button submit */
$scope.saveConfigs = function(){
var setFBref = new Firebase('https://asdf.firebaseio.com/products');
setFBref.update($scope.propertyConfiguration);
console.log("configurations saved!");
};
我有 3 个哈希路由说“共享”、“注册”和“主页”,而 else.redirectTo 设置为“共享”。(它们都使用这个控制器)这是发生的错误:(所有“链接”都是href="#hashWhereever")
1) 转到 website.com/#Shared 或刷新。控制台记录 $scope.propertyConfiguration 和“数据检索”。 DOM 什么都不显示。
2) 点击website.com/#Registration,控制台正确记录$scope数据,DOM加载正确。
3) 点击返回 website.com/#Shared,控制台正确记录 $scope 数据,但这次 DOM 加载正确。
4) 刷新当前正确加载的website.com/#Shared。 DOM 元素消失。
既然 $scope.data 在所有情况下都是正确的,Angular 不应该确保 DOM 正确地反映模型吗?为什么只有当我从另一个链接单击页面时,DOM 才能正确加载。
我可以通过添加 window.location.hash = "Shared" 来“修复”它,但它会在控制台中引发大量错误。
已修复:(排序)
$scope.$apply() 函数强制视图与模型同步。我会自己回答这个问题并关闭它,但我仍然想知道为什么当我正确地为 $scope 赋值时视图没有正确加载。如果 Angular 的“脏检查”在模型有可能发生变化时进行检查,那么为 $scope 赋值不是过分限定吗?
【问题讨论】: