【发布时间】:2014-10-19 16:25:34
【问题描述】:
我有一些嵌套指令:
<first-directive>
<second-directive user="user">
<third-directive name="name">
<fourth-directive description="description">
第一个指令的模板有第二个指令,第二个指令的模板有第三个指令,以此类推。所有指令都有独立的作用域。
第一个指令在自己的范围内设置user 对象。如果它以同步方式执行($scope.user = {name: "Alice"},那么一切都很好。但是,如果它以异步方式加载用户(例如$http.get(url).then(function (user) { $scope.user = user }),那么所有其他指令都将不起作用,因为例如当控制器功能评估第二个指令,user 尚未在其范围内设置。
到目前为止,我发现的唯一解决方案是在所有嵌套的 Promise 中使用 $scope.$watch(例如,$scope.$watch("user", function (user) { $scope.name = user.name} 用于第二个 Promise),这很糟糕,因为如果我想使用我已经在某处使用的指令else inside <first-directive>,我需要重写它以使用$scope.$watch...
还有其他方法可以解决吗?我知道我可以加载第一个指令所需的数据,例如在它使用的路由的resolve 函数中,但我希望能够在不修改任何路由或控制器的情况下将此指令放在任何页面中。
【问题讨论】:
-
为什么不在路由中解析用户而不是在控制器中获取用户?
-
我正在获取指令控制器中的对象,而不是路由控制器。我想创建一个可以放在任何页面上的独立组件,它会自行获取所需的数据。如果没有在任何地方添加 $scope.$watch 就无法使其工作,我可能最终会在使用该组件的路由中获取数据,但如果可能的话我想避免它。
标签: javascript angularjs angularjs-directive angular-promise