如何基于 DOM 元素隐藏带有 AngularJS 的元素

How to hide element with AngularJS based on DOM element

我有一个 Umbraco 设置。当我在 CMS 中编辑时,只要 DOM.

中没有文本编辑器,我希望 "Preview" 按钮消失

Angular 文件在本地 Umbraco/Views/content/edit.html

<form novalidate name="contentForm"
    ng-controller="Umbraco.Editors.Content.EditController"
    ng-show="loaded"
    ng-submit="save()"
    val-form-manager>

    <umb-panel umb-tabs ng-class="{'editor-breadcrumb': ancestors && ancestors.length > 0}">
        <umb-header tabs="content.tabs">

            <div class="span7">
                <umb-content-name placeholder="@placeholders_entername"
                                  ng-model="content.name" />
            </div>

            <div class="span5">
                <div class="btn-toolbar pull-right umb-btn-toolbar">
                    <div class="btn-group" ng-animate="'fade'" ng-show="formStatus">
                        <p class="btn btn-link umb-status-label">{{formStatus}}</p>
                    </div>

                    <umb-options-menu ng-show="currentNode"
                                      current-node="currentNode"
                                      current-section="{{currentSection}}"> 
                    </umb-options-menu>

                </div>
            </div>
        </umb-header>

        <umb-tab-view>
            <umb-tab id="tab{{tab.id}}" rel="{{tab.id}}" ng-repeat="tab in content.tabs">
                <div class="umb-pane">
                    <umb-property property="property"
                                  ng-repeat="property in tab.properties">
                        <umb-editor model="property"></umb-editor>
                    </umb-property>


                    <div class="umb-tab-buttons" detect-fold ng-class="{'umb-dimmed': busy}">

                        <div class="btn-group" ng-show="listViewPath">
                            <a class="btn" href="#{{listViewPath}}">
                                <localize key="buttons_returnToList">Return to list</localize>
                            </a>
                        </div>

                        <div class="btn-group" ng-show="!isNew">
                            <a class="btn" ng-click="preview(content)">
                                <localize key="buttons_showPage">Preview page</localize>
                            </a>
                        </div>

                        <div class="btn-group dropup" ng-if="defaultButton">
                            <!-- primary button -->
                            <a class="btn btn-success" href="#" ng-click="performAction(defaultButton)" prevent-default>
                                <localize key="{{defaultButton.labelKey}}">{{defaultButton.labelKey}}</localize>
                            </a>

                            <a class="btn btn-success dropdown-toggle" data-toggle="dropdown" ng-if="subButtons.length > 0">
                                <span class="caret"></span>
                            </a>

                            <a href="#">Return to list</a>

                            <!-- sub buttons -->
                            <ul class="dropdown-menu bottom-up" role="menu" aria-labelledby="dLabel" ng-if="subButtons.length > 0">
                                <li ng-repeat="btn in subButtons">
                                    <a href="#" ng-click="performAction(btn)" prevent-default>
                                        <localize key="{{btn.labelKey}}">{{btn.labelKey}}</localize>
                                    </a>
                                </li>
                            </ul>

                        </div>
                    </div>
                </div>
            </umb-tab>
        </umb-tab-view>


        <ul class="umb-panel-footer-nav nav nav-pills" ng-if="ancestors && ancestors.length > 0">
            <li ng-repeat="ancestor in ancestors">
                <a href="#/content/content/edit/{{ancestor.id}}">{{ancestor.name}}</a>
            </li>
            <li></li>
        </ul>

    </umb-panel>
</form>

我不确定这是不是正确的文件 - 但它似乎是创建 Preview 按钮的地方。

现在的问题是。我可以用 angular 确定文本编辑器是否处于活动状态,如果是,则显示 Save and publish 旁边的 Preview 按钮?

我会提出以下建议

1) 确定传递给 <umb-editor> 指令的对象的哪些属性是可访问的。

深入研究代码,我可以看到它有一个 .view 属性。您可以在运行时在浏览器控制台中检查它以查看可用的其他属性

2) 你可以在按钮上写一个规则来显示字段集合是否包含一个你可能已经识别的属性

像这样...

希望对您有所帮助

我找到了第二个解决方案,不妨在此处添加。我使用了 Umbraco 插件 Backoffice Tweaking

这里我将其添加到我的 Config\BackofficeTweaking.config 文件

<?xml version="1.0" encoding="utf-8"?>
<Config>
  <Rules>
    <Rule Type="HideButtons" Enabled="true" Names="preview" Users="" UserTypes="" ContentTypes="Omraader,Grund,Udstykning,Indstillinger,Niveau,Oversigt_Mappe,Oversigt,Information_Mappe,Information,Afstande_Mappe,Afstande" Description="" />
  </Rules>
  <Scripts>
    <Script Name="example"></Script>
  </Scripts>
</Config>

在这里您还可以编写一些脚本或做许多其他事情。该插件还有一个用于 Umbraco 的可视化编辑器。相当容易使用。