0

2 つのフォームのアニメーションの例があります。最初のフォームは非表示で、ボタンをクリックするともう 1 つのフォームが表示されます (キャンセルをクリックすると反転します)。http://plnkr.co/edit/asJ9u7MwRwMECpGaX3uz?p=previewを参照してください。

これの AngularJS バージョンを作りたいです。この件に関するジョン・リンドクイストのチュートリアルに適応しようとしています: http://egghead.io/lessons/angularjs-animating-the-angular-way

しかし今、私は立ち往生しています。2 番目のフォームを最初に非表示にする方法と、(適切な Angular の方法で) jQuery のみの例のように動作させる方法を教えてください。

http://plnkr.co/edit/Z4UYp1m3moVlarzbBNnO?p=previewでわかるように、コードには次の html があります。

<h1>Testing animation with AngularJS</h1>
<div ng-controller="MainCtrl as main" xmlns="http://www.w3.org/1999/html">
  <form ff-toggle-animation="!main.showNewUserForm" role="form">
    <input type="text" id="search" ng-model="main.username" size="30" placeholder="New username here">
    <button type="submit" class="btn btn-primary" ng-click="main.showNewUserForm=true">Add</button>
  </form>
  <form ff-toggle-animation="main.showNewUserForm">
    Username:  <input type="text" id="add" ng-model="main.username" size="30" placeholder="New username here"><br>
    Full name:  <input type="text" ng-model="main.name" size="30" placeholder="Add new user full name here"><br>
    Description: <textarea id="description" rows="2" ng-model="main.description" placeholder="Add user description here"></textarea>
    <button type="submit" ng-click="main.save()">Save</button>
    <button type="submit" ng-click="main.showNewUserForm=false">Cancel</button>
  </form>
</div>

そして、これは私がこれまでに持っているスクリプトです:

var app = angular.module('testApp', ['ngAnimate']);

app.controller('MainCtrl', function () {
  this.users = {};
  this.showNewUserForm = false;
  this.save = function() {
    // some code to save a new user
  }
});

app.directive("ffToggleAnimation", function ($animate) {
  return function (scope, element, attrs) {
    scope.$watch(attrs.ffToggleAnimation, function(newVal) {
      if(newVal) {
        $animate.addClass(element, "show");
      } else {
        $animate.removeClass(element, "show");
      }
    });
  }
});

app.animation(".show", function() {
  return {
    addClass: function(element, className) {
      $(element).toggle(400);
    },
    removeClass: function(element, className) {
      $(element).toggle(400);
    }
  };
});

最初のフォームを拡張する代わりに 2 つのフォームが必要な理由がありますが、この例ではその理由を伝えていません。

4

0 に答える 0