用Angularjs隐藏任何html元素
Hide any html element with Angularjs
对于控制器,我尝试隐藏任何被点击的html元素,像这样的函数调用:
<div class="well">
<h4><span class="label label-primary" ng-click="hideThis($event)" id="tag" hidden></span></h4>
<h4><span class="label label-default" ng-click="hideThis($event)" id="tag2" hidden></span></h4>
</div>
和这个脚本应该做的工作
var App = angular.module('App', []);
App.controller('appCtrl', function($scope) {
$scope.hideThis = function($event) {
$event.target.hide=true;
//Code I've tried:
// $event.target.hide();
// $event.target.hide(true);
};
});
也许我没有正确使用$event.target.etc
属性?
ng-if将从DOM中删除该元素;Ng-hide将元素从显示中隐藏。
其他两个答案已经有了要点,但没有详细说明为什么建议其他选项。它们也没有包含如何将这些指令与你想要在点击时发生的事情联系起来。
从总结开始:
- 在
ng-click
你的应用程序应该改变$scope
。 - On
$scope
changes Angular应该改变DOM元素的可见性。
让我重复一遍:你的应用应该更新模型(例如$scope
),而不是DOM本身。让后者由Angular来处理。
要添加更多细节…
AngularJS是一个为你处理"数据绑定"的框架,这意味着它将(也应该)负责保持你的模型(例如$scope
)和视图(标记)同步。您通常不应该干预此行为,除非有非常具体的原因需要这样做。在这个答案中可以找到关于这个和相关主题的相当长但有趣的阅读(顺便说一下,这个答案是关于什么时候可以自己使用jQuery的问题的回答)。
长话短说:不要在你的控制器/范围内更新DOM 。
代替:声明式地工作。确保你的控制器和作用域拥有基础视图决策所需的所有信息(例如:"show"vs"hide")。此外,确保根据作用域的情况告诉视图何时显示/隐藏。
为了完整起见,让我以重复@JohnManko的建议作为结束,其中的示例还展示了如何处理ng-click
来更改底层属性。
ng-if
:
var App = angular.module('App', []);
App.controller('appCtrl', function($scope) {
$scope.isTagOneActive = true;
$scope.isTagTwoActive = true;
$scope.hideTag1 = function() { $scope.isTagOneActive = false; }
$scope.hideTag2 = function() { $scope.isTagTwoActive = false; }
});
h4:hover { cursor: pointer; background-color: pink; }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.js"></script>
<div ng-app="App" ng-controller="appCtrl">
<h4 ng-if="isTagOneActive" ng-click="hideTag1()" id="tag">Tag One!</h4>
<h4 ng-if="isTagTwoActive" ng-click="hideTag2()" id="tag">Tag Two!</h4>
</div>
从DOM中完全添加/删除元素。
让AngularJS切换可见性,使用ng-show
和/或ng-hide
:
var App = angular.module('App', []);
App.controller('appCtrl', function($scope) {
$scope.isTagOneActive = true;
$scope.isTagTwoActive = true;
$scope.hideTag1 = function() { $scope.isTagOneActive = false; }
$scope.hideTag2 = function() { $scope.isTagTwoActive = false; }
});
h4:hover { cursor: pointer; background-color: pink; }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.js"></script>
<div ng-app="App" ng-controller="appCtrl">
<h4 ng-show="isTagOneActive" ng-click="hideTag1()" id="tag">Tag One!</h4>
<h4 ng-hide="!isTagTwoActive" ng-click="hideTag2()" id="tag">Tag Two!</h4>
</div>
可以更容易做到
<span class="label label-default" ng-show="showTag2=!showTag2" id="tag2" />
相关文章:
- 如何设置html元素填充的动画
- 删除对HTML元素的拖动
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 如何使用JQuery在Javascript中转换字符串中的HTML元素
- 一个html元素的克隆次数太多
- 使用AngularJS Directive WHITOUT$scope创建一个动态html元素
- 为什么我在Internet Explorer上看不到html元素
- 重新排列HTML元素的顺序并更改内容
- 使用.on动态添加jquery/js不知道的html元素
- 如果类不是一个选项,如何在使用 jQuery 时控制(避免)嵌套 html 元素的样式
- 如何将html元素添加到tampermonkey中
- 访问html元素值javascript
- 如何在HTML元素上创建函数,而不是将元素作为参数传递
- 自定义HTML元素属性未显示-Web组件
- 让HTML元素充当停止滚动的锚点
- 将html元素插入到文本字符串中,以匹配另一个html字符串
- 替换HTML元素中的字符
- 如何将html元素添加为生成的内容
- 如何使用JavaScript在没有html dom的情况下隐藏html元素
- 使用JS加载HTML元素