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 回答
0

您可以通过以下方式在指令的链接函数中访问 Angular 元素的 CSS 样式

var style = window.getComputedStyle(element[0]),

然后访问任何 CSS 规则的值,如下所示:

var color = style.getPropertyValue('color');
于 2017-01-04T22:00:08.650 回答