gpt4 book ai didi

angularjs - 如何从 Controller 方法触发 angularjs 动画?

转载 作者:行者123 更新时间:2023-12-02 22:42:21 25 4
gpt4 key购买 nike

我想从 Controller 方法触发 Angular 动画。

我提出了一些我不满意的东西(参见下面的代码)。

问题是,为了让我的动画正常工作,我需要跟踪 $scope 变量的状态,即 $scope.shake:

$scope.signin = function (formCtrl) {
$scope.shake = false;
if ($scope.credentials) {
signinService.signin($scope.credentials, function (status, memberRole) {
$scope.shake = false;
//TODO: necessary to check status?
if (status === 200) {
var memberType;
if (memberRole === 'ROLE_BASIC_PARENTS') {
memberType = 'parents';
}
if (memberRole === 'ROLE_BASIC_CHILDCARE_WORKER') {
memberType = 'childcare-worker';
}
$rootScope.globals = {
memberType: memberType,
authenticated: 'OK'
}

$cookies.globalsMemberType = $rootScope.globals.memberType;
$cookies.globalsAuthenticated = $rootScope.globals.authenticated;

$state.go('dashboard', {memberType: memberType});
}
},
function () {
$scope.shake = true;
});
}
else {
$scope.shake = true;
}
};

<form ng-class="{shake: shake}" name="formCtrl" ng-submit="signin(formCtrl)" novalidate>

有人可以建议一个更清洁的解决方案吗?

编辑 1:

这是请求的CSS代码:

@-webkit-keyframes shake {
0% {
-webkit-transform: translateX(0);
transform: translateX(0);
}

12.5% {
-webkit-transform: translateX(-6px) rotateY(-5deg);
transform: translateX(-6px) rotateY(-5deg);
}

37.5% {
-webkit-transform: translateX(5px) rotateY(4deg);
transform: translateX(5px) rotateY(4deg);
}

62.5% {
-webkit-transform: translateX(-3px) rotateY(-2deg);
transform: translateX(-3px) rotateY(-2deg);
}

87.5% {
-webkit-transform: translateX(2px) rotateY(1deg);
transform: translateX(2px) rotateY(1deg);
}

100% {
-webkit-transform: translateX(0);
transform: translateX(0);
}
}

@keyframes shake {
0% {
-webkit-transform: translateX(0);
transform: translateX(0);
}

12.5% {
-webkit-transform: translateX(-6px) rotateY(-5deg);
transform: translateX(-6px) rotateY(-5deg);
}

37.5% {
-webkit-transform: translateX(5px) rotateY(4deg);
transform: translateX(5px) rotateY(4deg);
}

62.5% {
-webkit-transform: translateX(-3px) rotateY(-2deg);
transform: translateX(-3px) rotateY(-2deg);
}

87.5% {
-webkit-transform: translateX(2px) rotateY(1deg);
transform: translateX(2px) rotateY(1deg);
}

100% {
-webkit-transform: translateX(0);
transform: translateX(0);
}
}

.shake {
-webkit-animation: shake 400ms ease-in-out;
animation: shake 400ms ease-in-out;
}

最佳答案

我建议您将表单包装在指令中,并通过事件触发动画。例如在 Controller 中你会这样做:

$scope.$broadcast('FORM_ERROR');

并在指令中,做一些类似的事情

scope.$on('FORM_ERROR', function() { // code to trigger animation goes here });

对我来说,将其作为一个事件处理是有意义的,因为这样它就有严格的生命周期;事件被调度,事件被处理。作用域变量会一直存在,即使它不再具有任何意义。您甚至可能需要代码将其“重置”回原始状态,以便可以再次触发动画,这会增加不必要的复杂性。

关于angularjs - 如何从 Controller 方法触发 angularjs 动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30082377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com