获取Div Width,然后更新Scope Variable
Get Div Width then Update Scope Variable
我试图限制我的angular应用程序的特定部分中显示的文本量。
因此,我设置了max-height
css变量,但有时ng-bind
可以返回大量文本,无论是否设置了最大高度,它都会显示这些文本。
在我试图解决这个问题的过程中,我使用了Angular中内置的limitTo
过滤器,但问题是随着页面大小的调整,这个limitTo
值也需要更改。(窗口越宽,我可以允许的文本越多)。
为了获得div的宽度,我使用
window.onload = function () {
var availableWidth = document.getElementById('theJazz').clientWidth;
if (availableWidth >= 500) {
self.limitQuestionText = 80;
} else {
self.limitQuestionText = 50;
}
}
然而,这提出了两个问题,我需要帮助:
1-在页面完全加载之前,此变量不可用,这就是我使用window.onload = function ()
的原因,但是,如果用户调整了浏览器窗口的大小,则需要更改availableWidth
。我该怎么做。
2-那么,实际的过滤器值:limitQuestionText
,我需要在页面加载后再次更新,这真的允许使用过滤器吗?在这一点上,它似乎不像通常的范围变量那样在不刷新屏幕的情况下更新。仅供参考-HTML看起来像:
ng-bind-html="story.point | limitTo: main.limitQuestionText"
谢谢。
好吧,你的评论中的CSS/SCSS方法看起来不错,这可能就是方法。
无论如何,使用AngularJS,我将创建一个指令来触发一个调整大小事件处理程序,该处理程序将更新limitTo
过滤器范围值。
请看下面的演示或这个小提琴。
备注:只有在"整页"模式下打开SO时,调整大小才有效。
angular.module('demoApp', [])
.controller('mainController', MainController)
.directive('resize', ResizeDirective);
function MainController() {
var vm = this;
//console.log();
//loading text from script tag (easier to write than inlined here)
vm.limit = 50;
vm.story = {
point: document.getElementById('dummyText.txt').text
};
}
function ResizeDirective($window, $timeout) {
return {
scope: {
limit: '='
},
link: function(scope, elem) {
var curWidth;
function onResize(e) {
curWidth = e.target.innerWidth;
$timeout(function() {
if ( curWidth >= 500 ) {
scope.limit = 80;
} else {
scope.limit = 50;
}
console.log(scope.limit);
}, 0); // timeout = run with next digest / also scope.$apply() would be OK
//console.log('resized', e);
}
// bind resize event
angular.element($window).bind('resize', onResize);
// dispatch event to trigger once at load to have the current width
$window.dispatchEvent(new Event('resize'));
scope.$on('$destory', function() {
// remove resize handler if directive scope destroyed
angular.element($window).unbind('resize', onResize);
});
}
};
}
.container {
background-color: gray;
max-width: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="demoApp" ng-controller="mainController as mainCtrl">
<pre>
scope limit {{mainCtrl.limit}}
cur. text length {{mainCtrl.limitedContent.length}}
</pre>
<div class="container" resize limit="mainCtrl.limit">
{{mainCtrl.limitedContent = (mainCtrl.story.point | limitTo: mainCtrl.limit)}}
</div>
<script type="text/plain" id="dummyText.txt">
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
</script>
</div>
相关文章:
- ng在更新$scope后重复不更新信息
- 获取Div Width,然后更新Scope Variable
- 在从websocket服务器推送消息后更新$scope变量
- JavaScript未更新$scope变量的一部分
- 如何在Angular中传递此回调并更新$scope
- 离子角 单击按钮后更新$scope变量
- AngularJS:如何在承诺响应后更新$scope
- AngularJS更新$scope变量并输出到pre
- 从 AngularJS 中的服务属性更新$scope
- 更新$scope-dons'不要影响视图
- AngularJS控制器在后端数据更改时自动更新$scope
- 从AngularJS中的服务获取数据后,如何更新$scope是最好的方法
- Angular js 在
标签上的变量更新$scope动画
- 为什么在这种特殊情况下视图没有更新?($scope.$apply)
- 通过更新$scope模型更正条目后,清除角度形式验证
- 当contenteditable Elements使用Angular.js更改时,更新$scope
- Angularjs-在$resource-delete方法的回调中更新$scope的问题(thinkster.io第三章
- Angular JS,在指令中从控制器中更新$scope
- 关闭模式时更新$scope集合
- Ionic:更新$scope变量后重新加载视图