$resolve在创建控制器之前不会添加到$scope
$resolve not added to $scope until after controller creation
我正在尝试利用(1.5.0 中的新功能)功能,该功能将解析图添加到路由范围内。 但是,在控制器加载之前,地图似乎实际上并没有添加到范围中。
这是一个非常简单的模块,演示了这个问题(来自这个 plunk):
var app = angular.module("app", ['ngRoute']);
app.config(['$routeProvider', '$locationProvider',
function($routeProvider, $locationProvider) {
$routeProvider.otherwise({
controller: "editController",
controllerAs: "ec",
templateUrl: "edit.html",
resolve: {
resolveData: function() {
return {
foo: "bar",
blah: "halb"
}
}
}
});
}
]);
app.controller("editController", ["$scope", function($scope) {
// undefined
console.log($scope.$resolve);
setTimeout(function() {
// the object is there, including $scope.$resolve.resolveData
console.log($scope.$resolve);
}, 0)
}]);
如果您观看控制台,您会注意到创建控制器时undefined
$scope.$resolve
。但是,正如setTimeout
所证明的那样,它紧接着就在那里。
我在文档中找不到任何表明应该如此的内容。 这是一个错误吗? 还是我只是对角度的工作原理没有了解?
如果其他人遇到这种情况 - 它已经在角度 github 上报告并作为预期行为解决。 $scope.$resolve 并不是真正打算在控制器中使用。 你应该注入它,或者使用$route.current.locals。
(或者,您可以使用 $scope.$resolve 将代码包装在$timeout中。
请注意,您的对象比您预期的要大得多,实际上您的对象位于$resolve
上。这主要在文档中进行了解释,但是,可以通过示例更详细
解析地图将在路由范围内可用,在 $resolve
无需深入研究,当您resolve
时,命名对象将成为可注射物,然后您可以放在$scope
上,在这种情况下,resolveData
。观察以下内容...
app.controller('editController', ['$scope', 'resolveData', function($scope, resolveData) {
console.log(resolveData);
// -- $scope.data = resolveData; // -- assign it here
}]);
普伦克 - 更新的演示
调查您获得undefined
的原因是由于框架中等待摘要周期的性质。处理$resolve
的一个可接受的解决方法包括将调用注入和包装在$timeout
中,这会强制一个摘要循环,在该循环中,您的对象将在异步回调中可用。如果这种方法不理想,请放弃注入$timeout
,直接为已解析的对象调用$route.current.locals
,或者将对象作为命名参数注入,如上例所示,它将立即解析该参数。
- 在观看后清除之前添加的GeoJson(scope.data)中的谷歌地图
- 如何添加$scope$打开以在没有控制器的情况下查看
- 从 JSON 获取数据并将此元素添加到变量$scope
- $resolve在创建控制器之前不会添加到$scope
- 如何在 Angular 中动态添加$scope
- 将异步 REST 调用 JSON 添加到 Angular $scope
- 可以't向我的简单JSON($scope.customers)中添加新数据
- 需要帮助理解$scope继承(并将新生成的内容添加到Angular)
- 未将标准输入添加到Angularjs Form$Scope中
- 想要从$scope数组中添加和减去项
- AngularJS:如何添加新的POST'将项添加到$scope而不刷新页面
- 在ngRepeat内部时,如何从Angular中的指令向$scope添加新属性
- javascript添加事件监听器不适用于angularjs$scope
- 将$scope添加到控制器
- 将sqlite查询结果添加到angularjs的$scope中
- 将指向服务对象属性的指针/引用添加到$scope变量
- AngularJS:在工厂服务中添加$scope时出错
- 使用路由添加的控制器在Angular JS中声明$scope变量
- Angular-添加输入's的值,其中包含来自$scope的数字
- 在不定义ng选项的情况下,将select中的值添加到scope中