如何将 Angular-UI 元素 属性 更改为 Jquery

How to change Angular-UI element property with Jquery

我正在尝试制作一个顶部有两个按钮的简单手风琴:一个按钮打开每个面板,一个按钮折叠它们。

我正在尝试使用 jQuery 的 prop 方法来更改每个 uib-accordion 元素上的 is-open 属性,但是当我单击时没有任何反应在任一按钮上。

<div ng-controller="AccordionController">
    <p>
        <button type="button" class="btn btn-default btn-sm" ng-click="openAll()">Open All</button>
        <button type="button" class="btn btn-default btn-sm" ng-click="collapseAll()">Collapse All</button>
    </p>
    <uib-accordion close-others="false">
        <uib-accordion-group class="accordionGroup" ng-repeat="xmlResult in xmlResults" is-open="false">
            <uib-accordion-heading>
                //heading...
            </uib-accordion-heading>
            //content...
        </uib-accordion-group>
    </uib-accordion>
</div>

这是我的控制器

angular.module("ResultsTreeViewer").controller("AccordionController", function ($scope) {

    $scope.openAll = function () {
        $(".accordionGroup").prop("is-open", true);
    };
    $scope.collapseAll = function () {
        $(".accordionGroup").prop("is-open", false);
    }
});

我喜欢 Angular 唯一的解决方案,但这不是必需的。我只是想让它工作。

我会说不要在控制器内部使用 jQuery 和 Angular。

而是在每个 accordion 记录中包含 isOpen 变量,然后通过调用单个函数 actionAccordion 函数使其成为 true & false(有意义以 angular 的方式拥有它。

标记

<p>
    <button type="button" class="btn btn-default btn-sm" ng-click="actionAccordion(true)">Open All</button>
    <button type="button" class="btn btn-default btn-sm" ng-click="actionAccordion(false)">Collapse All</button>
</p>
<uib-accordion close-others="false">
    <uib-accordion-group class="accordionGroup" ng-repeat="xmlResult in xmlResults" 
      is-open="xmlResult.isOpen">
        <uib-accordion-heading>
            //heading...
        </uib-accordion-heading>
        //content...
    </uib-accordion-group>
</uib-accordion>

代码

$scope.actionAccordion = function (flag) {
    angular.forEach($scope.xmlResults, function(xmlResult){
        xmlResults.isOpen = flag;
    })
};