javascript - jsPlumb 在 angular.js 中的 View 更改后不会重绘?

标签 javascript angularjs jsplumb ngroute ng-view

我使用 angularjs ngRoute 制作了两个页面。在第一页上,我展示了两个连接的 jsPlumb 对象。 第二页不包含 Plumb 对象。但是,当我从第一页转到第二页时,Plumb 对象并没有消失。您知道如何通过 ng-view 更新实现正确的 jsPlumb 刷新吗?

http://plnkr.co/edit/8592E9BnuwVXuKAJ5Pdx?p=preview

脚本.js

var app;
app = angular.module('ironcoderApp', [
    'ngRoute',
    'appControllers'
]);

app.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('/page1', {
        templateUrl: 'page1.html',
        controller: 'Page1Controller'
      }).
      when('/page2', {
        templateUrl: 'page2.html',
        controller: 'Page1Controller'
      }).
      otherwise({
        redirectTo: '/page1'
      });
  }]);

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

app.controller('Page1Controller', ['$scope', '$rootScope', '$routeParams', '$location', '$timeout',

function($scope, $rootScope, $routeParams, $location, $timeout) {
  $scope.text = 'page1';

  $timeout(function(){
    jsPlumb.connect({'source': $("#page1el1"), 'target': $("#page1el2"), 'label': 'te'});
  }, 0);
}
]);

app.controller('Page2Controller', ['$scope', '$rootScope', '$routeParams', '$location',

function($scope, $rootScope, $routeParams, $location) {
  $scope.text = 'page2';
}
]);

app.controller('MainController', ['$scope', '$rootScope', '$location',
function($scope, $rootScope, $location) {
  $scope.text = 'main';
}
]);

页面.html:

    <script type="text/ng-template" id="page1.html">

        <div id="page1el1" style="border: 1px red solid; width: 60px;">page1el1</div>
        <br>
        <div id="page1el2" style="border: 1px red solid; width: 60px;">page1el2</div>
        <br>
        page1

        <a href="#/page2">go to page2</a>

    </script>

    <script type="text/ng-template" id="page2.html">

        <br><br><br><br><br><br><br>
        <div id="page2el1" style="border: 1px green solid; width: 60px;">page2el1</div>
        <br>
        <div id="page2el2" style="border: 1px green solid; width: 60px;">page2el2</div>
        <br>

        page2

        <a href="#/page1">go to page1</a>
    </script>


    <div ng-view >

    </div>

最佳答案

  1. 您的代码中有错字。
    当路由为/page2时,controller应该是Page2Controller而不是Page1Controller
  2. 我们必须在导航到 page2 时手动断开 jsPlumb。

函数($scope,$rootScope,$routeParams,$location,$timeout){

$scope.$on('$destroy', function () {
    jsPlumb.detachAllConnections( $("#page1el2"))
});

$timeout(function(){
    jsPlumb.connect({'source': $("#page1el1"), 'target': $("#page1el2"), 'label': 'te'});
}, 0);
});

这是更新的插件:http://plnkr.co/edit/mtjamVFRpjphpYE0Yqub?p=preview

关于javascript - jsPlumb 在 angular.js 中的 View 更改后不会重绘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28779205/

相关文章:

php - 如何嵌入适用于所有网络和移动浏览器的 PDF

javascript - 如何在递归函数中维护变量?

javascript函数指针和 "this"

javascript - 当值为字符串时,kendo.tostring 不格式化数字

javascript - 为什么无法通过实例化构造函数方法将对象插入数组?

angularjs - 使用 templateUrl 时,isolateScope() 返回未定义

php - 单独的后端 (Symfony2) 和前端 (AngularJS) REST - 如何进行身份验证

ios - 如何在 ionic framework latest beta 14 上同时使用选项卡和滑动菜单?

javascript - 如何在 Angular 中导入非 npm 依赖项

javascript - 你能为流程图的 minimap 组件推荐库吗?