AngularJS控制器与嵌套隔离范围指令的通信

时间:2016-05-26 09:07:13

标签: angularjs angularjs-directive angularjs-scope isolate-scope

在我的AngularJS应用程序中,我必须为每个包含滑块控件的部分创建一个手风琴。我希望手风琴和滑块都将API暴露给外部控制器,例如:

accordion.collapseAll()
accordion.openNextPane()

slider.resetValue()

我希望能够在控制器中做类似的事情:

$scope.clickNext = function() {
    $scope.accordion.openNextPane();
};

$scope.clickResetAll = function() {
    $scope.items.forEach(function(item, ind) {
        $scope.slider[ind].resetValue();
        // or:
        $scope.accordion.pane[ind].slider.resetValue();
    });   
}

我正在考虑为手风琴和滑块创建隔离范围指令,使用双向绑定允许它们将方法公开给父控制器。页面模板将如下所示:

<div ng-controller="myController">
    <accordion data="accordion">
        <div ng-repeat="c in collection">
            <accordion-pane>
                <slider data="slider"></slider>
            </accordion-pane> 
        </div>
    </accordion>
</div>

但是在这一点上,我迷失在孤立范围的迷宫中,对儿童的能见度有限,似乎没有办法从外部控制器访问内部元素。我用google搜索过的许多解决方案似乎都认为指令与控制器交谈是正常的,而不是相反,但这似乎打破了封装。

有关如何做到这一点的任何想法?这个问题的正确AngularJS模式是什么?

0 个答案:

没有答案