Nev*_*r K 5 d3.js angularjs angularjs-directive
我有一个小查询了解一段代码.
我认为$ watchCollection将根据以下语法作为参数传递时监视数组:
$ watchCollection(obj,listener);
我的查询是在这段代码中:
var exp = $parse(attrs.chartData);
var salesDataToPlot=exp(scope);
Run Code Online (Sandbox Code Playgroud)
然后用于:
scope.$watchCollection(exp, function(newVal, oldVal){
salesDataToPlot=newVal;
redrawLineChart();
});
Run Code Online (Sandbox Code Playgroud)
"exp"是类型函数,当我试图将它作为数组传递时,我得到了"无法读取未定义的属性'长度"错误.我在尝试此代码时遇到了错误:
var salesData = scope[iAttrs.chartData];
.
.
.
.
scope.$watchCollection(salesData, function(newVal, oldVal){
salesDataToPlot=newVal;
redrawLineChart();
});
Run Code Online (Sandbox Code Playgroud)
为什么我不能将salesData作为数组传递给$ watchCollection?
$parse服务接受一个表达式,并将其转换为一个函数,当给定上下文(通常是范围)时,该函数将解析为实际数据。
var exp = $parse(attrs.chartData); // exp is an expression function that needs context
var salesDataToPlot=exp(scope); is the actual result of supplying exp with context - the scope. The result is the array you need
Run Code Online (Sandbox Code Playgroud)
只需观看 salesDataToPlot ( pen ):
scope.salesDataToPlot = salesDataToPlot;
scope.$watchCollection('salesDataToPlot', function(newVal, oldVal){
salesDataToPlot=newVal;
redrawLineChart();
});
Run Code Online (Sandbox Code Playgroud)
直接使用 salesData 会引发错误,因为 salesData 是作用域上的属性,而不是此闭包中可用的变量。要使 $watchCollection 在范围内查找此属性,您必须使用“salesData”( pen )。
scope.$watchCollection("salesData", function(newVal, oldVal){
salesDataToPlot=newVal;
redrawLineChart();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |