如何从angular元素中获取编译的nodeValue

时间:2016-03-25 19:28:01

标签: javascript angularjs dom compilation directive

基本前提是我在编译并将其复制到变量后尝试访问元素的value属性。例如:如果vm.datasource.data ['+ i +']。HolidayName编译成“圣诞节”我想获取该值并将其存储在变量中。

是否可以将编译后的值复制到变量中?

var link = function(scope, elem, attrs){

      setTimeout(function(){
        var checkboxCellArray = elem.find('.md-checkbox-cell');

        _.forOwn(checkboxCellArray, function(node, i) {
          if(angular.element(node).hasClass('md-checkbox-cell')){
            var element = angular.element('<p value="{{vm.selected.length}} checked. {{vm.headers[0].orderBy}}. {{vm.datasource.data['+ i +'].HolidayName}}. {{vm.headers[1].orderBy}}. {{vm.datasource.data['+ i +'].Country}}"></p>')
            var compiled = $compile(element)(scope);

            setTimeout(function(){
              console.log(compiled);
            }, 500)
          }
        });
      }, 1000)
    }

2 个答案:

答案 0 :(得分:0)

经过几个小时的辛苦工作后,我发现了解决方案后5分钟...

只需在编译后添加范围。$ apply(),变量将具有更新的值。

答案 1 :(得分:0)

真正的问题是你使用setTimeout函数并从中更新角度的东西。 setTimeout异步事件正在修改来自外部角度世界的角度范围,不会使角度消化系统运行消化周期。您必须手动启动它以更新HTML页面上的绑定。使用$timeout代替setTimeout可以轻松解决此问题,setTimeout会在$timeout(function(){ var checkboxCellArray = elem.find('.md-checkbox-cell'); _.forOwn(checkboxCellArray, function(node, i) { if(angular.element(node).hasClass('md-checkbox-cell')){ var element = angular.element('<p value="{{vm.selected.length}} checked. {{vm.headers[0].orderBy}}. {{vm.datasource.data['+ i +'].HolidayName}}. {{vm.headers[1].orderBy}}. {{vm.datasource.data['+ i +'].Country}}"></p>') var compiled = $compile(element)(scope); $timeout(function(){ console.log(compiled); }, 500) } }); }, 1000) } &amp;将在它之后运行消化循环。

<强>代码

In [142]: df
Out[142]:
    value       date stock
0       4 2015-01-01  amzn
1       2 2015-02-01  amzn
2       5 2015-03-01  amzn
3       6 2015-04-01  amzn
4       7 2015-05-01  amzn
5       8 2015-06-01  amzn
6       6 2015-07-01  amzn
7       5 2015-08-01  amzn
8       4 2015-09-01  amzn
9       1 2015-10-01  amzn
10      2 2015-11-01  amzn
11      4 2015-12-01  amzn
12      7 2015-12-02  amzn

In [143]: df[(df['date'] >= pd.to_datetime('2015-10-01'))].groupby(df['date'].dt.month).sum()
Out[143]:
      value
date
10        1
11        2
12       11