带有Swiffy实例的AngularJS指令会在路由导航时抛出错误

时间:2014-04-14 09:53:49

标签: angularjs google-swiffy

设置

我有一个指令,它将json文件的路径作为属性值,加载json,然后实例化Swiffy:

angular.module('myApp')
  .directive('swiffy', function ($http) {
    return {
      restrict: 'A',
      scope: {},
      link: function postLink($scope, $element, attrs) {

        var stage;


        // Listen to angular destroy
        $scope.$on('$destroy', function() {

          if(stage) {
            stage.destroy();
            stage = null;
          }
        });


        // Load swiffy json
        $http({
          method: 'GET',
          url: attrs.swiffy
        }).success(function(data, status, headers, config) {

          stage = new swiffy.Stage( $element[0], data );
          stage.start();

        }).error(function(data, status, headers, config) {

        });
      }
    };
  });

标记:

<div swiffy="my-animation.json"></div>

我还有一个基本的路由设置:

angular
  .module('myApp', [
    'ngCookies',
    'ngResource',
    'ngSanitize',
    'ngRoute'
  ])
  .config(function ($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl'
      })
      .when('/info', {
        templateUrl: 'views/info.html',
        controller: 'InfoCtrl'
      })
      .otherwise({
        redirectTo: '/'
      });
  });

这里的控制器是空的。

问题

json文件按原样加载,并且Swiffy svg创建得很好。但是,当我离开具有漂亮指令的视图时,角度会抛出错误并且整个应用程序会中断:

TypeError: Cannot read property '1' of null
    at annotate (angular.js:3179:24)
    at Object.invoke (angular.js:3846:21)
    at angular.js:5580:43
    at Array.forEach (native)
    at forEach (angular.js:323:11)
    at Object.<anonymous> (angular.js:5578:13)
    at Object.invoke (angular.js:3869:17)
    at angular.js:3711:37
    at Object.getService [as get] (angular.js:3832:39)
    at addDirective (angular.js:6631:51)

在指令中触发'$ destroy'事件后抛出错误,所以我知道stage.destroy()已在Swiffy对象上运行。

抛出错误的angularjs函数可以在https://github.com/angular/bower-angular/blob/7ae38b4a0cfced157e3486a0d6e2d299601723bb/angular.js#L3179

找到

据我所知,annotate()试图在匿名函数上读取参数并失败。如果删除Swiffy实例,我没有错误,因此错误必须是创建Swiffy对象的结果。

我正在使用:

到目前为止,我已尝试过:

  • 更新到AngularJS版本1.2.17-build.111 + sha.19d7a12。 (它包含注释功能的更新,但不能解决问题)
  • 从指令中删除了'严格模式'。
  • 删除了stage.destroy()

我宁愿不对angular.js源做任何更改(我试图使角度跳过匿名函数,但这打破了更多的东西)并且swiffy运行时不可用,因此我不确定是什么正在那里。任何想法都会很棒,谢谢。

0 个答案:

没有答案