gpt4 book ai didi

angularjs - 如何在不使用 jQuery 的情况下获取指令中的元素 css?

转载 作者:行者123 更新时间:2023-12-03 06:40:13 25 4
gpt4 key购买 nike

我尝试使用指令和 spin.js(不使用 jQuery)用 AngularJS 编写加载器。

我知道 AngularJS 有自己的 jQuery lite。但是我无法从指令中的 element 获取 width

基本上我需要获取按钮宽度(内部指令)

到目前为止我尝试过:

element[0].width  // < - error
angular.element(element[0]).css('width') // < - undefined

我们开始:

中的演示 Plunker

HTML

 <button type="submit" loader left="5" ng-click="loadData()" >Load Data</button>

JS

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

app.controller('MainCtrl', function($scope, stockData, $timeout) {


$scope.loadData = function(){

$scope.init();

stockData.query()
.then(function (result) {
$timeout(function () {
$scope.data = result.data;

$scope.stop();
return result.data;
}, 3000);
}, function (result) {
alert("Error: No data returned");
});
}
});


app.directive('loader', ['$parse', 'stockData', '$timeout', function ($parse, stockData, $timeout) {

return {
restrict: 'A',
link: function (scope, element, attr) {

var spinner;

var opts = {
lines: 13, // The number of lines to draw
length: 3, // The length of each line
width: 2, // The line thickness
radius: 7, // The radius of the inner circle
corners: 1, // Corner roundness (0..1)
rotate: 0, // The rotation offset
direction: 1, // 1: clockwise, -1: counterclockwise
color: '#000', // #rgb or #rrggbb or array of colors
speed: 1.3, // Rounds per second
trail: 60, // Afterglow percentage
shadow: false, // Whether to render a shadow
hwaccel: false, // Whether to use hardware acceleration
className: 'spinner', // The CSS class to assign to the spinner
zIndex: 2e9, // The z-index (defaults to 2000000000)
top: 'auto', // Top position relative to parent in px
left: 'auto' // Left position relative to parent in px
};


target = element[0];

scope.init = function(){
attr.$set('disabled', true);


if(attr['left'] != undefined){

var left_ = parseInt(attr['left']);

console.log(element[0].width); // < - error
console.log(angular.element(element[0]).css('width')); // < - undefined


if(left_ >= 0){
//opts.left = element.width() + parseInt(attr['left']);
}
else{
// opts.left = -element.width()/2 + parseInt(attr['left']);
}
}

spinner = new Spinner(opts).spin(target);
};

scope.stop = function(){
attr.$set('disabled', false);
spinner.stop();
};
}
};
}]);


app.factory('stockData', ['$http', '$q', function ($http, $q) {

var factory = {
query: function () {
// dummy call
var data = $http.get('http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22YHOO%22)%0A%09%09&env=http%3A%2F%2Fdatatables.org%2Falltables.env&format=json');
var deferred = $q.defer();
deferred.resolve(data);
return deferred.promise;
}

}
return factory;
}]);

谢谢,

最佳答案

使用element[0].offsetWidth

.css('width') 将是未定义的,因为您没有任何内联 CSS 定义宽度,并且 .width是 jQuery 的东西。

如果 jQuery 不可用,

angular.element 使用“jqLit​​e”,它仅提供部分功能。计算的 CSS 样式不是其中之一(并且 won't be any time soon 由于性能影响)。

有一个不错的引用,告诉你不用 jQuery 可以做什么 here

关于angularjs - 如何在不使用 jQuery 的情况下获取指令中的元素 css?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19764688/

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