javascript - $watch on 指令,其嵌套对象的隔离范围作为 crossfilter 的属性

标签 javascript angularjs json angularjs-directive crossfilter

我创建了一个具有隔离范围、元素的指令,并使用传入的这些值来构建 d3/dc 图表。所以我有一些数据通过 $scope 上的 crossfilter 放置,以便指令属性可以读取它。然后我拉入指令,日志记录范围显示它很好,但是我无法在没有未定义的情况下专门/直接访问嵌套对象。

在 Controller 内:

var data = [{
    "player": "Player A",
        "team": "New York",
        "hits": 200
}, {
    "player": "Player B",
        "team": "New York",
        "hits": 225
}, {
    "player": "Player C",
        "team": "New York",
        "hits": 1
}, {
    "player": "Player D",
        "team": "San Francisco",
        "hits": 268
}, {
    "player": "Player E",
        "team": "San Francisco",
        "hits": 22
}, {
    "player": "Player F",
        "team": "Seattle",
        "hits": 2
}, {
    "player": "Player G",
        "team": "Seattle",
        "hits": 25
}]
$scope.ndx = crossfilter(data);
$scope.playerDim = $scope.ndx.dimension(function (d) {
     return d.player;
});

$scope.playerGrp = $scope.playerDim.group().reduceSum(function (d) {
   return d.hits;
});

html

    <my-chart id="someChart"
                   chart-type="pieChart"
                   height="200"
                   width="200"
                   dimension="playerDim"
                   group="playerGrp" />

指令:

myApp.directive('myChart', ['chartFactory' function(chartFactory) {
    return {
       restrict: 'E',
       scope = {
          chartType: "@",
          height: "@",
          width: "@",
          dimension: "=",
          group: "="
       },
       link: function(scope, elem, attr) {
          console.log(scope) // shows the dimension object as a property on the object just fine
          console.log(scope.dimension) // undefined
       }
    };
}])

我的猜测是,当我console.log它时,该函数并没有真正在那里设置对象,尽管它在那里显示了它(误导)。我尝试过 $watch、$timeout 等,但似乎没有什么能让我获得该嵌套对象。

谁能帮我理解这里发生了什么?

最佳答案

尝试使用$watch

link: function(scope, elem, attr) {      
  scope.$watch('dimension', function(nVal, oVal) {
    if (nVal) {
      console.log('dimension=', scope.dimension);
    }
  });
}

关于javascript - $watch on 指令,其嵌套对象的隔离范围作为 crossfilter 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43293765/

相关文章:

javascript - Node.js 中的本地文件出现 404 错误

javascript - 使用 Wcf 服务在 Angular Js 应用程序中添加总计

python - 从 Rest api GET 创建嵌套 json 格式

javascript - 如何获得表头的宽度并与 JQuery 中的表格单元格具有相同的大小?

javascript - Vue.js - 内联调用异步方法

java - 在小程序上显示 HTML 内容 - wmode 透明?

javascript - 使用 ng-pattern 的多封电子邮件的正则表达式

javascript - 在 AngularJS 中更改 DOM 元素的位置

json - 如何将 Joda DateTime 对象作为 HTTP POST 的消息正文传递到 Jersey REST 端点?

c# - Json.net 反序列化列表给出重复项