AngularJS动画美元.输入不添加ng-enter和ng-enter-active类
AngularJS $animate.enter not adding ng-enter and ng-enter-active classes
我试图将$animate
服务合并到我自己的指令中。我不能用回车键和离开键来制作动画
奇怪的是,使用$animate.enter
时,元素被附加到DOM,并触发回调函数。但是似乎ng-animate
, ng-enter
和ng-enter-active
类从未被添加。元素只是简单地附加到DOM中,没有动画。回调函数会触发,但它会立即触发而不是在动画结束后触发。同样的事情发生在leave
;元素会立即从DOM中移除,回调也会立即触发;没有动画。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>$animate.enter</title>
<script data-require="angular.js@1.2.x" src="http://code.angularjs.org/1.2.14/angular.js" data-semver="1.2.14"></script>
<script data-require="angular.js@1.2.x" src="http://code.angularjs.org/1.2.5/angular-animate.js" data-semver="1.2.5"></script>
<script type="text/javascript" charset="utf-8">
var app = angular.module('TestAnimation', []);
app.controller('TestAnimation', function($scope) {
});
app.directive("appendaroo", function($animate, $compile) {
function link(scope, element, attr) {
var isAppended = false;
var parent = element.parent();
var box;
element.on('click', function() {
isAppended = !isAppended;
if (isAppended) {
box = angular.element('<div class="rect"></div>');
$animate.enter(box, parent, element, function() {
console.log("Done entering");
});
} else {
$animate.leave(box, function() {
console.log("Done leaving");
});
}
});
}
return {
link: link
};
});
</script>
<style type="text/css" media="screen">
.rect {
width: 100px;
height: 100px;
background-color: #ff9933;
transition: all 1s ease-out;
}
.rect.ng-enter,
.rect.ng-leave.ng-leave-active {
opacity: 0;
}
.rect.ng-enter.ng-enter-active,
.rect.ng-leave {
opacity: 1;
}
</style>
</head>
<body ng-controller="TestAnimation" ng-app="TestAnimation">
<button appendaroo>Fade in/out</button>
</body>
</html>
我对Angular相当陌生,我想我只是错过了一些东西,所以如果这是一个疯狂愚蠢的问题,我很抱歉。但是在你自己的指令中使用$animate
的资源似乎并不多。
我能够使用$animate.addClass
和$animate.removeClass
没有问题,这是有帮助的,并建议我在正确的轨道上,但enter
和leave
给我的问题。
我把例子放在朋克上:
http://plnkr.co/edit/XtvZAZzgA8ORZBaRN68d?p =预览
要使用ngAnimate
模块,您需要将其作为依赖项添加到您的模块:
var app = angular.module('plunker', ['ngAnimate']);
你没有得到任何异常的原因是,基本模块包含一个$animate
服务,具有文档中描述的默认实现(有点令人困惑):
$animate的默认实现,不执行任何操作而只是同步执行DOM更新和调用完成()回调。
为了启用动画,必须加载ngAnimate模块。
查看功能实现签出src/ngAnimate animate.js
添加ngAnimate
模块作为依赖项,您的代码仍然不会像您希望的那样运行。然而,这是因为一些完全不同的东西,而不是真正与$animate
服务有关:
.on()
是一个包含在Angular的jqLite中的jQuery方法。附加事件处理程序中的代码位于Angular之外,所以你需要使用$apply:
$apply()用于从外部执行angular中的表达式角框架。(例如,从浏览器DOM事件,setTimeout, XHR或第三方库)。因为我们正在呼叫angular框架需要执行合适的作用域生命周期异常处理,执行手表。
像这样包装您的$animate
调用,您的代码将正常工作:
scope.$apply(function () {
$animate.enter(box, parent, element, function() {
console.log("Done entering");
});
});
scope.$apply(function () {
$animate.leave(box, function() {
console.log("Done leaving");
});
});
演示:http://plnkr.co/edit/iWHBNyKfwiSUUFKrMQff?p=preview
- 使用angularjs ng Show/ng hide显示和隐藏不同的内容
- 我需要NG-IF/NG-SWITCH还是NG-SHOW&NG-HIDE
- 根据特定条件使用ng显示/ng隐藏来显示/隐藏元素
- 访问重复之外的ng重复ng形式
- 如何隐藏 ng 重复 ng 如果
- ng显示ng隐藏在ng中,重复如何为每个包裹的块单击/触发
- AngularJS自定义指令ng显示/ng隐藏
- 如何在使用$http缓存时重新触发ng-if/ng显示动画
- AngularJS:隐藏<td>使用ng-hide/ng-show没有间隙
- 使ng-show/ng-hide与由Angular之外的外部源修改的localStorage一起工作
- 是否可以使用相同的变量使ng if的行为类似于ng show/ng hide
- Angular ng通过ng选项重复多个选择字段,而不显示已选择的数据
- angular ng show/ng hide无法正确使用ng bind html
- 如何从 ng-repeat(ng-repeat)中的指令访问控制器范围
- ng-repeat / ng-bind 不会显示我的数据
- ng-show / ng-hide / ng-if 不适用于 Angular 指令
- 如何使用ng类ng-click删除类
- ngAnimate没有在Angular 1.2的ng-view中添加ng-enter类
- ng-enter未在ui视图上触发,ui视图是页面刷新时另一个ui视图的子视图
- AngularJS动画美元.输入不添加ng-enter和ng-enter-active类