Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Cytoscape.js指令在调整容器大小时不使维度无效_Javascript_Angularjs_Cytoscape.js - Fatal编程技术网

Javascript Cytoscape.js指令在调整容器大小时不使维度无效

Javascript Cytoscape.js指令在调整容器大小时不使维度无效,javascript,angularjs,cytoscape.js,Javascript,Angularjs,Cytoscape.js,我在angular.js指令中有一个cytoscape.js图形,用于监听(监视)它的容器div宽度。当我在应用程序中折叠侧面板时,container div占据整个屏幕的宽度,然后运行$watch,然后执行cy.resize() 在我的link函数中,我调用了容器 var container = angular.element(document.querySelector('#cy')); 它工作了,我得到了容器,并设置了图表,它显示的很好 然后,当容器div宽度更改时 scope.$wat

我在angular.js指令中有一个cytoscape.js图形,用于监听(监视)它的容器div宽度。当我在应用程序中折叠侧面板时,container div占据整个屏幕的宽度,然后运行
$watch
,然后执行
cy.resize()

在我的link函数中,我调用了容器

var container = angular.element(document.querySelector('#cy'));
它工作了,我得到了容器,并设置了图表,它显示的很好

然后,当容器div宽度更改时

scope.$watch(function () {
        return document.querySelectorAll("#cy")[0].clientWidth;
    }, function (newVal, oldVal) {
        if (newVal !== oldVal) {
            if (typeof cy.resize === 'function') {
                cy.resize();
            }
        }
    });
$watch运行正常,div确实变宽了,但容器只是移到了新清理的区域。地图在
.resize()
上没有失效,我得到的是鼠标位置计算错误。当我重新调整浏览器窗口的大小时,它会正确地调整大小(正如文档中提到的)


在我的情况下,如何强制调整大小?

很可能您通过Angular设置的侦听器没有按预期工作。Angular不是设置侦听器的可靠方法,除非您正在收听的所有内容都在Angular的模型中,并且与Angular的更新周期同步更新。这有很多限制,我不认为Angular能满足你的要求


改为绑定到适当的事件,或者在调整分区大小的每个函数中调用
cy.resize()

经过长时间的尝试,我们最终完成了此过程

  • 在控制器中,我们连接到
    window.onresize()
    事件。因为我们使用了
    controllerAs
    ,所以我们必须定义一个作用域,一个对象来观察一个布尔值,当窗口被调整到更大的宽度时,这个布尔值变为真,使用getter和setter,就像这样

    Object.defineProperty(vm, "toggleNav", {
            get: function () {
                return navToggled;
            },
            set: function (newValue) {
                navToggled = newValue;
                if (angular.isFunction(vm.resizeControl.onresize)) {
                    vm.resizeControl.onresize();
                }
            }});
    vm.resizeControl = {};
    
  • 在指令中,我们观察了scope属性(
    resizeControl
    )的变化

  • scope.resizeControl.onresize = function () {
        if (angular.isObject(cy) && angular.isFunction(cy.resize)) {
            $timeout(function () {
                cy.resize();
            });
        }
    };