将html元素存储在对象中并等待ng-include包含模板

时间:2015-09-01 13:33:09

标签: javascript angularjs

我正在尝试使用此代码:

   var Table = function($elem) {
     this.PROPERTIE.element = $elem;

     this.init();
   };

   Table.prototype.PROPERTIE = {
     secondElement: $('.second') // this exists in the HTML
   };

   Table.prototype.init = function() {
     console.log(this.PROPERTIE.element) -> output the element;
     console.log(this.PROPERTIE.secondElement) -> undefined
   };


    var tableDirective = function() {
        return {
            restrict: 'M',
            link: function($scope, $elem) {
                return new Table($elem);
            }
        };
    };

angular.module('app').directive('tableDirective', tableDirective);

如果我试图在我的构造函数类的任何方法中获取一个html元素,我可以,但如果我尝试在对象中存储相同的元素,他将是未定义的。

为什么对我来说非常明显。是因为$('。second');当PROPERTIE对象尝试丰富它们时不存在,因为该元素在模板内部,并且我使用ng-include拉动该模板。

我能解决这个问题吗?在脚本运行之前等待ng-include或相关的东西?我想尝试使用$ timeout和setTimeout。

先谢谢你们。

1 个答案:

答案 0 :(得分:0)

Table.prototype.PROPERTIE = {
  secondElement: function(){ return $('.second')}
};

Table.prototype.init = function() {
  console.log(this.PROPERTIE.element)
  console.log(this.PROPERTIE.secondElement())
};

在脚本加载时发生的$('.second')定义期间,您正在调用jq函数Table.prototype.PROPERTIE。将其更改为方法是有效的,因为在脚本加载时您没有分配任何内容。