拖放Angular 1.x指令/组件和父作用域

时间:2016-07-07 19:46:35

标签: angularjs angularjs-directive angularjs-scope angularjs-components

假设我的祖父母组件/指令的范围变量声明如下:$scope.g = { // methods here };

在我的每个嵌套组件/指令的控制器中,我指的是$scope.$parent.$parent.g之类的变量,然后从g调用某些函数,例如$scope.fromNgClick = function() { $scope.$parent.$parent.g.run(); };。这很好用(虽然我想更好地引用祖先,比如别名?而不是$ parent链)。

当我将一个组件从它的祖父母组件拖动到另一个祖父母兄弟组件(得到那个?)时,同样的$scope.fromNgClick = function() { $scope.$parent.$parent.g.run(); };仍然指向原始范围,而不是像我需要它那样的新范围。因此,单击相同的ng-clickable元素仍会触发先前祖父母范围内的run()方法。

这一切都有道理;但是,有没有办法让范围指向新的删除位置祖父母范围呢?

谢谢!

修改
标记类似于以下内容,其中<g-directive>被视为祖父母,因为它在其模板上使用transclude,最终包装子指令:

<g-directive>
    <child-directive></child-directive>
    <another-child-directive></another-child-directive>
    <yet-another-child-directive></yet-another-child-directive>
</g-directive>
<g-directive>
    <c-child-directive></c-child-directive>
    <c-another-child-directive></c-another-child-directive>
    <c-yet-another-child-directive></c-yet-another-child-directive>
</g-directive>

这就是子指令/组件$scope.$parent.$parent.g的原因。

可以拖动子组件然后将其放入另一个<g-directive>,但它的控制器仍指向其原始祖父(原始<g-directive>的控制器范围变量)。我希望它指向新的祖父母被放入,基本上将其范围重置为新放置的范围。

1 个答案:

答案 0 :(得分:0)

async someFunction(listings, function() {
    for (var i in listings ) {
        var listing = listings[i];
        await delay(5000);
        await asyncFunction(listing);
        console.log('Done');
    }
});

每个人都可以拥有<g-directive some-attr=1> <child-directive></child-directive some-attr=1> <another-child-directive></another-child-directive some-attr=1> <yet-another-child-directive></yet-another-child-directive some-attr=1> </g-directive> <g-directive some-attr=2> <child-directive></child-directive some-attr=2> <another-child-directive></another-child-directive some-attr=2> <yet-another-child-directive></yet-another-child-directive some-attr=2> </g-directive> broadcast的不同听众。

如果通过emit重复指令,则ng-repeat可以是该属性。 希望这可以帮助。