4

ディレクティブの要素に CSS プロパティを設定できます。しかし、同じメソッドを使用して要素の css プロパティを取得することはできません。空の文字列を返すだけです。

すなわち: var test = element.css("background-size"); //動作しません!

私は何を間違っていますか?以下のディレクティブのリンク ハンドラーを参照してください。

link: function($scope, element, attrs) {

                        //debugger;

                        //handler for close button:
                        //its the first child within the parent element:
                        $scope.closeBtn = angular.element(element.children()[0]);


                        //save the background image so we can toggle its visibility:
                        $scope.backgroundImg = element.css("background","url(../../a0DK0000003XvBYMA0/assets/images/tabbed_panel_bkgd.png) no-repeat") ;//className:
                        element.css("background-position","0px 35px");
                        element.css("background-size", "924px 580px");

                        //above I was able to set css properties, but why can't I  retrieve css properties like this??:
                        var test = element.css("background-size");

                        $scope.closeBtn.bind('click',function(){
                            TweenLite.to(element, .75, {top:"635px",ease:Power2.easeOut,
                                onComplete:function(){
                                    $scope.opened = false;
                                    $scope.closeBtn.css('opacity',0);
                                }   });
                        })
                        //hander to raise tab panel:
                        element.bind('click', function() {
                            if(!$scope.opened){
                                //debugger;
                                $scope.closeBtn.css('opacity',1);
                                TweenLite.to(element, .75, {top:"150px",ease:Power2.easeOut});
                                $scope.opened = true;    
                            }
                        });

                    }
4

2 に答える 2

1

私は質問から一歩下がって、JQuery で行っていたのと同じように css プロパティを取得しようとしている場合、おそらく「角度のある方法」でソリューションを適用していないことに気付きました。私の最初の問題は、css プロパティを保存する必要があったため、後で再適用することです。そのため、そのアプローチの代わりに、ng-class ディレクティブを使用してクラスを切り替え、何も保存する必要がないようにしました。

<html>
    <body>

               <tabbed-Panel ng-class="btmTabPanelClass" >
                   <div ng-show="opened" class="tabPanelCloseBtn"> </div>
                        <tabs>
                <pane ng-repeat="pane in panes" heading="{{pane.title}}"  active="pane.active">
                    <div class ="tabPanelContent" ng-include src="activeContent()"></div>
                </pane>
            </tabs>

        </tabbed-Panel>
            </div
    </body>
</html>



angular.module('directives', ['baseModule','ui.bootstrap'])


  .directive('tabbedPanel',['$animator',function($animator) {

        //debugger;
        return {
                   //scope:{},
                    restrict:"E",

                    //add controller to here
                    controller:function($scope){
                       //debugger;

                       $scope.bTabClicked = 0;
                       $scope.curTabIdx = 0;
                       $scope.opened = false;
                       $scope.closeBtn = null;

                       $scope.arClasses = ["bottomTabPanel", " bp_off"];
                       $scope.btmTabPanelClass = $scope.arClasses[0] + $scope.arClasses[1] ;


                       //get the tabs from the flows.json so we can create a model for the tab panel!
                       $scope.panes = $scope.flows[$scope.getCurFlowIdx()].array_data[$scope.getCurPageIdx()].tab_data;

                       //first tab is active by default:
                       //$scope.panes[0].active = true;

                       //set the content for the current tab:
                       $scope.activeContent = function() {
                       for (var i=0;i<$scope.panes.length;i++) {

                            if ($scope.panes[i].active) {
                                $scope.curTabIdx = i;
                                return $scope.panes[i].content;
                            }            
                          }
                        };


                        //tab click watcher (to make sure user clicks on tab and not tab container):
                        $scope.$watch('activeContent()', function(paneIndex) {
                            ++$scope.bTabClicked;
                        });

                       //--------------------------------------------------
                    },
                    link: function($scope, element, attrs) {

                        //debugger;

                        //handler for close button:
                        //its the first child within the parent element:
                        $scope.closeBtn = angular.element(element.children()[0]);

                        $scope.closeBtn.bind('click',function(){
                            // set all tabs to inactive:

                            $scope.bTabClicked = 0;

                            for (var i=0;i<$scope.panes.length;i++)
                               $scope.panes[i].active = false;  

                            TweenLite.to(element, .75, {top:"635px",ease:Power2.easeOut,
                                onComplete:function(){
                                     $scope.opened = false;
                                     $scope.btmTabPanelClass = $scope.arClasses[0] + $scope.arClasses[1] ;
                                     $scope.$apply(); //force binding to update
                                     $scope.bTabClicked = 0;
                                 }   });
                         })

                        /*hander to raise tab panel:*/
                        element.bind('click', function() {
                            if(!$scope.opened && $scope.bTabClicked){
                                //debugger;
                                TweenLite.to(element, .75, {top:"150px",ease:Power2.easeOut});
                                $scope.opened = true; 
                                $scope.btmTabPanelClass = $scope.arClasses[0] ;
                                $scope.$apply(); //force binding to update
                            }
                            else
                               $scope.bTabClicked = 0;

                        });

                    }
            };
}]);
于 2013-06-06T14:15:34.533 に答える