Шаблон Вставляется в пользовательский тег, поэтому ваш <div>
становится дочерний <hideme>
тега.
В функции связи(), то element
аргумента является <hideme>
тега - не <div>
--therefore в <hideme>
восстановлении скрытого тега не отобрази ребенок <div>
, который был стилизованным с display: none
. Другими словами, если у вас есть это:
<hideme style="display: block"> <div style="display: none">Show this in three seconds.</div> </hideme>
, что не будет показывать <div>
.
Если вы не загружаете jQuery перед загрузкой angularjs, то angularjs использует что-то, что он вызывает jqLite для обертывания элементов. Обернутые элементы действуют как завернутые jQuery наборы, но они имеют уменьшенные функциональные возможности, например. show() и hide() не предоставляются.
Так что, если вы загрузите JQuery, а затем загрузить angularjs, вы можете сделать это:
приложение.ЯШ:
var app = angular.module('myApp', []);
app.directive('hideMe', ['$timeout', function($timeout) {
var directive = {};
directive.restrict = 'E';
directive.link = function(scope, element, attrs) {
element.html(
'<div style="display:none">'
+ element.text()
+ '</div>'
);
$timeout(function() {
element.children().show();
}, 3000);
};
return directive;
}]);
index.html:
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<!-- For html5 (default is UTF-8) -->
<meta charaset="UTF-8">
<!-- For Bootstrap -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>AngularJS Examples</title>
<!-- Bootstrap CSS -->
<link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.1/css/bootstrap.min.css" rel="stylesheet">
<!-- app.css -->
<link href="app.css" rel="stylesheet">
</head>
<body class="container">
<hide-me>Show this after three seconds.</hide-me>
<!-- JQuery 2.1.1 -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Angular 1.3.3 -->
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.3/angular.min.js"></script>
<!-- app.js -->
<script src="app.js"></script>
</body>
</html>
Однако я заметил, что кратко на странице текста мигает перед тем, как скрытые. Редактировать: Если я заменил element.text()
на element.html()
, тогда вспышки нет.
С другой стороны, если вы не загрузить JQuery вы можете сделать это:
var app = angular.module('myApp', []);
app.directive('hideMe', ['$timeout', function($timeout) {
var directive = {};
directive.restrict = 'E';
directive.link = function(scope, element, attrs) {
var hideme = element[0];
hideme.innerHTML = '<div style="display:none">' + hideme.innerHTML + '</div>';
$timeout(function() {
var div = hideme.childNodes[0];
div.style.display = "block";
}, 3000);
};
return directive;
}]);
Затем текст не мигает на экране перед прячась.
извините, не работает, это [plunk] (http://plnkr.co/edit/JeQz5Ab35zuKoi2k9tCF?p=preview) – ps0604
Кажется, что cdn, который использует plnkr, не захватывает углов. Проверьте плунжер, работайте после подкачки в ресурсе cdnjs .. //cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.3/angular.min.js – irth
, используя переменную области видимости для проверки того, что мы должны отображать это или нет, для этого требуется переменная по элементу. в моем случае у меня будет ссылка, чтобы отображать детали для каждого сообщения, генерируемого директивой ng-repeat. если я нажму кнопку, появятся все детали всех сообщений:/ – Alex