【发布时间】:2015-04-30 17:55:27
【问题描述】:
我创建了一个指令,它使元素根据窗口的百分比自动调整大小。但仍有一些问题我无法解决。
这里是文件:
autoresize.js:
angular.module('autoresize', [])
.directive('autoresize', function() { return {
scope:{theId:'@id', theClass:'@class', wFactor:'@w', hFactor:'@h'},
link: function(scope, elem, attrs) {
scope.onResize = function() {
if(scope.hFactor != 'w')
{
scope.height = Math.floor($(window).innerHeight()*scope.hFactor);
}
if(scope.wFactor != 'h')
{
scope.width = Math.floor($(window).innerWidth()*scope.wFactor);
}
if(scope.hFactor == 'w')
{
scope.height = scope.width;
}
if(scope.wFactor == 'h')
{
scope.width = scope.height;
}
$(elem).outerHeight(scope.height);
$(elem).outerWidth(scope.width);
}
scope.onResize();
angular.element($(window)).bind('resize', function() {
scope.onResize();
});
}
}
});
test.htm:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<style type="text/css">
*
{
box-sizing: border-box;
}
html, body
{
margin: 0;
padding: 0;
}
#left, #right
{
display: inline-block;
}
#left
{
background: #101010;
}
#right
{
background: #777777;
}
#bottom
{
background: #AAAAAA;
}
</style>
</head>
<body>
<div ng-app="testApp" ng-controller="testCtrl">
<div id="content">
<div id="left" autoresize w="0.5" h="0.8"></div><div id="right" autoresize w="0.5" h="0.8"></div>
<div id="bottom" autoresize w="1" h="0.2">{{width}}</div>
</div>
</div>
<script src="vendor/angular.min.js"></script>
<script src="vendor/jquery-2.1.3.min.js"></script>
<script src="autoresize.js"></script>
<script>
angular.module('testApp', ['autoresize'])
.controller('testCtrl', function($scope, $http) {
});
</script>
</body>
</html>
第一个问题是,当我打开 web 应用程序时,大小无法正确初始化:我必须调整窗口大小才能使其正常工作。为什么链接函数中的scope.onResize() 行没有正确初始化所有内容?
第二个问题是在元素中无法访问范围变量“width”和“height”:在下面的示例中,div“bottom”中没有任何内容。如何让它们可访问?
(在这里你可能认为 CSS 就足够了,但实际上我的应用比下面的示例要复杂一些,CSS 还不够)
非常感谢!
【问题讨论】:
-
对于第二个问题,孤立的作用域是罪魁祸首。
标签: angularjs angularjs-directive