【问题标题】:AngularJS Directive not being applied未应用 AngularJS 指令
【发布时间】:2015-05-26 15:16:02
【问题描述】:

我正在使用一个插件(jackrabbits-angularjs-datetimepicker),使用他们的示例可以正常工作。

但是,我想根据另一个输入隐藏/显示表单。我注意到如果我根据输入隐藏/显示指令,似乎该指令永远不会被应用(我只剩下一个输入字段)。

例如,如果他们想要培训 - 我将显示/隐藏一个表单以允许他们输入日期/时间(显示/隐藏通过 ng-show 完成)。

有没有办法再次应用该指令?该指令是否在页面加载期间应用 - 从而导致显示/隐藏不应用指令?

【问题讨论】:

  • 您必须提供一些代码以便人们可以帮助您

标签: angularjs datetimepicker directive


【解决方案1】:

如果您使用 ng-if 而不是 ng-show,该指令将再次被重新应用。 你可以让你的指令实际监听/等待一个属性/作用域道具并再次重新应用自己,而不是依赖于 ng-if,但为了给你更多信息,我们必须查看一些代码。

如果 ng-if 适合您,您应该知道每次条件更改时它都会重新渲染内部的所有内容。另一方面,ng-show 只是将隐藏样式应用于元素及其子元素,因此您的指令不会被“应用”两次。

Ng-if 还会创建一个隔离作用域(比放置它的作用域更深的一个作用域),您可能会担心也可能不会担心。

【讨论】:

  • 将我的 ng-show 更改为 ng-if 仍然是同样的问题 - 我在这里包含了 HTML 和 JS -jsfiddle.net/5b06abhj
【解决方案2】:

我测试了库并看到了您的问题,使用某些 ng 属性时该指令似乎中断。

如果我在周围元素上使用 ng-if/show/hide,我就能让它工作。例如,将指令包装在一个 div 中。

更新
在此处查找 Codepen:http://codepen.io/tobiasc/pen/XbNZLz

注意 ng-if 和 ng-show 的区别。 ng-if 将元素拉出 DOM,而 ng-show 只设置“display: none;”。这意味着如果您使用 ng-if 显示/隐藏元素,它会被重置。如果您使用 ng-show 显示/隐藏元素,它会保持状态,在这种情况下,它将保留用户所做的任何选择。

HTML:

<body ng-app="datetimepickerDemo">
    <div ng-controller="tmpCtrl">
        <div ng-if="showTime">
            <datetimepicker data-ng-model="data.embeddedDate" data-datetimepicker-config="{ startView:'day', minView:'day' }" />
        </div>
        <button ng-click="showTimeChange(true)">Enable</button>
        <button ng-click="showTimeChange(false)">Disable</button>
    </div>
</body>

JS:

angular.module('datetimepickerDemo').controller('tmpCtrl', function ($scope) {
    $scope.showTime = true;
    $scope.showTimeChange = function (bool) {
        $scope.showTime = bool;
    };
});

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
相关资源
最近更新 更多