- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我编写了一对指令,旨在在单击元素时将多个元素中的一个元素缩放到更大的尺寸。单击缩放的元素应将其恢复为正常大小。当一个元素被缩放时,它的姐妹元素(它们都是 d3 图表)变得不可见。当放大的元素取消缩放时,它们会恢复可见性。
这是 HTML 的样子:
<chart-container class="chart" chart-height="400" >
<h3 class="text-center">Vehicles by year</h3>
<div class="text-center" full-screen-toggle>
<bar-chart bar-data="{{vehiclesByYear}}"
layout="{{vehiclesByYearLayout}}"
bar-labels="{$dy: '-.5em', $anchor: 'middle'}"></bar-chart>
</div>
</chart-container>
<chart-container class="chart" chart-height="400">
<h3 class="text-center">Vehicle speed distribution</h3>
<div class="text-center" full-screen-toggle>
<pie-chart pie-data="{{aboveBelow}}"
layout="{{aboveBelowLayout}}"></pie-chart>
</div>
</chart-container>
神奇之处在于元素指令 chart-container 和属性指令 full-screen-toggle。后者总是装饰图表容器内的子元素。这是两个指令的代码:
angular.module( 'MarkOlbert.fullScreenChart', [] ).directive( 'chartContainer', function () {
return {
restrict: 'E',
scope: {
chartHeight: '@chartHeight',
},
controller: ['$scope', '$element', '$rootScope', function ( $scope, $element, $rootScope ) {
var zoomState = 'normal';
var _self = this;
this.changing = false;
this.chartHeight = $scope.chartHeight;
function unZoom() {
$element.css('width', '50%' );
_self.changing = true;
$rootScope.$broadcast( 'chart:unzoom' );
_self.changing = false;
zoomState = 'normal';
}
function zoom() {
$element.css( 'width', '100%' );
_self.changing = true;
$rootScope.$broadcast( 'chart:zoom' );
_self.changing = false;
zoomState = 'full';
}
$element.on( 'click', function () {
switch ( zoomState ) {
case 'normal':
zoom();
break;
case 'full':
unZoom();
break;
}
} );
$rootScope.$on( 'chart:unzoom', function () {
if ( _self.changing ) return;
$element.css( 'display', 'block' );
} );
$rootScope.$on( 'chart:zoom', function () {
if ( _self.changing ) return;
$element.css( 'display', 'none' );
} );
}],
};
} );
angular.module( 'MarkOlbert.fullScreenToggle', [] ).directive( 'fullScreenToggle', function ($rootScope) {
return {
restrict: 'A',
require: '^^chartContainer',
link: function(scope,element,attrs, chartCtrl){
element.css('height', chartCtrl.chartHeight );
$rootScope.$on( 'chart:zoom', function () {
if ( !chartCtrl.changing ) return;
element.css( 'height', 1000 );
} );
$rootScope.$on( 'chart:unzoom', function () {
element.css( 'height', chartCtrl.chartHeight );
} );
},
};
} );
在条形图指令中,我有一个简单的 watch ,它应该响应条形图高度的变化:
scope.$watch( function () { return element.height(); }, function () {
if ( element.height() == 0 ) return;
}, true );
现在它什么也没做,因为我想弄清楚为什么当全屏切换改变高度时它没有被调用。
显示/隐藏功能按设计工作。 chart-container 和 full-screen-toggle 中的所有各种事件监听器都在应有的时候被调用,并且没有错误地执行。
当图表容器更改其元素的宽度时,页面会按预期更新。但是当全屏切换改变条形图的高度时,什么也没有发生。条形图中的 $watch 永远不会触发。
最佳答案
.on()
是一个 jqLite/jQuery 方法,不会自动触发 AngularJS 的摘要循环。
现在发生的是:
但是由于摘要循环从未被触发,检查元素高度的观察者将永远不会执行,也不会检测到任何变化。
你可以使用$apply
:
$element.on('click', function() {
$scope.$apply(function() {
switch (zoomState) {
case 'normal':
zoom();
break;
case 'full':
unZoom();
break;
}
});
});
关于javascript - Angular : Height Change Not Detected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37632827/
这个问题在这里已经有了答案: How can I vertically align elements in a div? (28 个答案) Vertical Aligned Text and Im
我想做一个像 view0.height = view1.height + view2.height 这样的约束。当 view1.height 或 view2.height 改变时,view0.heig
有人可以解释为什么这个标记: 呈现大约 2x18 的 float div(在 Chrome/Firefox 中)而不是 2x2 div? 即使所有空格都被删除,图像似乎也遵循 font-
我的 HTML 页面上有一些可拉伸(stretch)的元素。 使用这个 CSS .stretchable-element { height: 25%; } 随着浏览器窗口高度的增加,可伸缩元素
我在“developer.android.com”上查看以缩小我的位图文件,但我发现了一件事我不明白。所以我很感激你能给我一点帮助。 这是一个 snippet来自 developer.android.
假设我们有以下设置: .container { background-color: red; width: 500px; min-height: 300px; } .child { b
我遇到了高度错误的问题 $(window).height(); 也有类似的问题 here 就我而言,当我尝试时 $(document).height(); 它似乎返回了正确的结果 窗口高度返回320
我正在尝试使用 javaFX (2.2) 开发桌面应用程序,但我遇到了一些困难,无法真正让它按照我希望的方式运行。作为该框架的新用户,我可能没有按应有的方式使用它... 我想要的是一种仪表板,在 Sc
就这么简单:) 我右边的列动态变化,由于左列的高度设置为 100%,我认为根据 Right_Column 的高度动态修改容器的高度会很好。有小费吗?谢谢:) 最佳答案 如果我正确理解了问题,你可以做这
我有一个 ScrollView(包含 NSTextEditor),其顶部、左侧和右侧约束相对于其容器(主窗口)正确设置为 0。 我无法使其高度为主容器的一半。有什么帮助吗? 最佳答案 如果我理解正确,
这个问题之前曾被问过(Infinite Scroll on Mobile browsers),但没有得到回应。 我正在尝试实现无限滚动。 检查文档是否在底部,导致更多加载的函数是: if ($(win
这个问题在这里已经有了答案: height:100% VS min-height:100% (4 个答案) 关闭 6 年前。
我在尝试解决这个问题时遇到了一些问题。我已经编写了一个 jquery 函数来检测用户何时点击页面底部并触发一个函数。现在,虽然这适用于最常见的屏幕尺寸,但当用户的屏幕太大以至于可以一次看到整个页面时,
如何获得与导航高度(填充)相同的导航高度 ...!? nav { width: 100%; } nav ul { text-align: center; background-
所以,实际上我可能完全想多了,应该放弃最小高度,但我目前有以下 HTML:
我正在阅读 Bootsrap3 文档。我发现这段页脚代码粘在屏幕底部。 html, body { height: 100%; } #wrap { min-height: 100%; height: a
我对容器 div 的高度有疑问。我想 它是 body 的 100%,但不起作用。我添加了 css body height=100% var d = document; $(d).ready(funct
我有一个三部分布局:页眉、内容和页脚。我非常熟悉绝对定位技术;当我希望内容 div 扩展到可用高度的 100% 时,我经常使用它。 在这种情况下,我的问题是我事先不知道页脚的高度,它是根据自己的内容动
在下面的代码中,我尝试实现无限滚动。我遇到的问题是“document.height”和“window.height”返回相同的值。有人可以帮我解决我哪里出错了吗?
我有一个页面布局,其中两个 div 在一行中彼此相邻对齐。一列包含可变长度的文本,第二列包含图像。 标记基本上如下: texttext 我的
我是一名优秀的程序员,十分优秀!