1

特に hide-element ディレクティブ内で、ネストされたディレクティブに問題があります。

まず、ngAnimate では機能しないと思われる編集モード ディレクティブがあります。ヒット addClass フェード オン ボタンは引き続きヒットしますが、ng-animate はバインドされません。

非表示要素を divColumn の兄弟要素に移動しようとしましたが、edit-element ディレクティブが機能し、ボタンと divColumn の両方でアニメーションを実行します。

それらがネストされている場合は機能しません。何故ですか?

(私はAngularJSを初めて使用します。親切に教えてください)

HTML

<!-- ngview has UIController everything here is nested within ngview -->

<h3>Data Page</h3>

<div class="divContainer" ng-mouseenter="fadeToggle()" ng-mouseleave="fadeToggle()">
<div style="overflow:hidden">
    <div class="divHeader">Data Name</div>
    <div class="divHeader">Parent Data</div>
    <div class="divHeaderHidden" hide-element="isHidden">Edit</div>
</div>
<div ng-controller="myController">
    <div ng-repeat="data in datas">
        <div class="divRow" ng-mouseenter="fadeToggle();" ng-mouseleave="fadeToggle();">
            <div class="divColumn">
                {{data.name}} 
            </div>
            <div class="divColumn">
                {{data.parentData.name}}
            </div>
            <div class="divColumnHidden" hide-element="isHidden">
                <button class="editColumnBtn" ng-click="editToggle()" edit-mode="isEdit">Edit</button>
                <button class="removeColumnBtn" edit-mode="isEdit">Remove</button>
            </div>
        </div>
    </div>
</div>

角度

app.factory('Data', function($http) {
    var dataService = {
        getDepartment: function() {
            var promise = $http.get('http://localhost/orgchart/app/json/data').then(function(response) {
                return response.data;
            });
            return promise;
        }
    };
    return dataService;
});

app.controller('UIController', ['$scope', function fadeController($scope) {
    $scope.fadeToggle = function () {
        this.isHidden = !this.isHidden;
    };
}]);    

app.controller('myController', ['$scope', 'Data', function myController($scope, Data) {
    Data.getData().then(function(data) {
        $scope.data = data;
    });
        $scope.editToggle = function() {
        this.isEdit = !this.isEdit;
    };
}]);

app.directive('editMode', ['$animate', function ($animate) {
    return function(scope, element, attrs) {
        scope.isEdit = false;
        scope.$watch(attrs.editMode, function (newVal) {
            if(newVal) {
                $animate.addClass(element, 'fade');
            }
            else {
                $animate.removeClass(element, 'fade');
            }
        });
    };
}]);

app.directive('hideElement', ['$animate', function ($animate) {
    return function(scope, element, attrs) {
        scope.isHidden = true;
        scope.$watch(attrs.hideElement, function (newVal) {
            if(newVal) {
                $animate.addClass(element, 'fade');
            } else {
                $animate.removeClass(element, 'fade');
            }
        });
    };
}]);

app.animation(".fade", function() {
    return {
        addClass: function(element, className) {
            TweenMax.to(element, 0.3, {opacity: 0});
        },
        removeClass: function(element, className) {
            TweenMax.to(element, 0.3, {opacity: 1});
        }
    };
});
4

0 に答える 0