如何使用 Jquery 更改 Angular-UI 元素属性

Posted

技术标签:

【中文标题】如何使用 Jquery 更改 Angular-UI 元素属性【英文标题】:How to change Angular-UI element property with Jquery 【发布时间】:2016-06-25 18:04:24 【问题描述】:

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

我正在尝试使用 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 的解决方案,但这不是必需的。我只是想让它工作。

【问题讨论】:

is-open 是一个attribute and not a property。 @Stryner 使用attr 也不起作用。你建议我用什么? 检查元素时,it works for me. @Stryner 我看到它更新了 is-open 属性,但它没有打开或关闭任何手风琴。我想这个问题的答案超出了这个问题的范围。 【参考方案1】:

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

宁可在每个 accordion 记录中包含 isOpen 变量,然后通过调用单个函数 actionAccordion 函数使其成为 truefalse(以角度方式具有它是有意义的)。

标记

<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;
    )
;

【讨论】:

这与我的问题的答案一样正确,因为is-open 属性只能接受角度对象,而不是字符串文字。 @LCIII yupe.. 内部accordion 指令有isOpen 变量...它随时切换到showhide(这个切换过程可以从双方发生, 因为手风琴与isOpen: '=') 绑定

以上是关于如何使用 Jquery 更改 Angular-UI 元素属性的主要内容,如果未能解决你的问题,请参考以下文章

如何将选项更改传递给 Angular-UI ui-select2?

如何将 jsonp 与 angular-ui 日历一起使用

如何防止 angular-ui 模态关闭?

如何结合护照和angular-ui路由

如何使用 angular-ui popover 附加元素

如何判断在 Angular-UI 中选择了哪个引导选项卡