我有几个嵌套的指令:如何编写嵌套指令
<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
尚未设置尚未就其范围。
我到目前为止发现的唯一的解决方案是使用在所有嵌套的承诺$scope.$watch
(如$scope.$watch("user", function (user) { $scope.name = user.name}
第二承诺),它吸了很多,因为如果我想使用指令,我已经使用<first-directive>
内的其他地方,我需要重写它以使用$scope.$watch
以及...
有没有其他方法可以解决它?我知道我可以加载第一条指令所需的数据,例如在resolve
函数的路由它的使用,但我希望能够把这个指令在任何页面,而无需修改任何路由或控制器。
为什么不解决用户在路线而不是在控制器中获取用户? – cbass 2014-10-18 20:14:14
我正在抓取指令的控制器中的对象,而不是路由的控制器。我想创建一个可以放在任何页面上的独立组件,它会自行获取它需要的数据。如果没有办法让它在没有添加$ scope的情况下工作,$ watch到处都是,我最终可能会在组件被使用的路由中获取数据,但是如果可能的话,我想避免它。 – szimek 2014-10-18 20:34:54