【发布时间】:2013-03-03 15:11:52
【问题描述】:
我有这两个指令,一个相互嵌套:
<envato class="container content-view-container" data-ng-cloak data-ng-hide="spinner">
<items data-ng-repeat="items in marketplaces"></items>
</envato>
这两个都是这样定义的:
Application.Envato.directive("envato", ["$timeout", function($timeout){
var object = {
restrict : "E",
controller : "EnvatoAPIController",
transclude : true,
replace : true,
templateUrl : "templates/envato-view.php",
link : function(scope, element, attrs, controller) {
console.log(scope);
return controller.getLatestItems().then(function(data) {
scope.marketplaces = angular.fromJson(data);
scope.count = scope.marketplaces.length;
var tst = angular.element(element).find(".thumbnails");
/* $timeout(function() { scope.swiper = new Swipe(document.getElementById('swiper-container')); }, 5000); */
scope.spinner = false;
});
}
};
return object;
}]);
Application.Envato.directive("items", function(){
var iterator = [],
object = {
require : "^envato",
restrict : "E",
transclude : false,
replace : true,
templateUrl : "templates/envato-items-view.php",
link : function(scope, element, attrs, controller) {
iterator.push(element);
if (iterator.length === scope.$parent.$parent.count) { console.log(iterator); };
}
};
return object;
});
上面的很多代码可能没有多大意义,因为它是更大应用程序的一部分,但我希望它可以解决我的问题。我要做的是从指令items 更改指令envato 的范围属性。因为我有一个迭代,我想知道它什么时候完成,所以我可以在迭代期间对附加的 DOM 元素执行另一个操作。
例如,假设我将在指令envato 中定义scope.swipe,并观察它的变化。在指令items 中,我将观察ng-repeat 何时完成,然后更改上面定义的范围属性scope.swipe。这将触发指令envato 内部的更改,现在我知道我可以做我的操作了。
我希望我足够清楚,如果不是,我可以尝试编写更多代码,或者我会尝试更具体。我怎样才能实现我刚才描述的?
编辑:我知道在指令items 中使用:console.log(angular.element(element.parent()).scope()); 会给我envato 指令的范围,但我想知道是否有更好的方法这样做。
【问题讨论】:
标签: javascript angularjs angularjs-directive angularjs-scope