首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角度访问范围属性

角度访问范围属性
EN

Stack Overflow用户
提问于 2014-06-26 16:13:15
回答 1查看 283关注 0票数 1

我有下面的代码作为指令。我试图将scope从控制器传递到这个指令,并且它似乎正在正确地传递它(console.log(scope);工作正常)。但是,当我尝试访问scope.data属性时(它看起来应该返回console.log for scope中的一个数组),它将返回undefined。这是为什么,我怎么能解决这个问题?

代码语言:javascript
复制
myApp.directive('d3Cloud', ['$window', 
                            'd3Service', 
                            'd3Cloud', 
                            function($window, 
                                     d3Service, 
                                     d3Cloud) {
  return {

    // Restrict usage to element/attribute
    restrict: 'EA',

    // Manage scope properties
    scope: {

      // Bi-directional data binding
      data: '=',

      // Bind to DOM attribute
      label: '@'
    },

    // Link to DOM
    link: function(scope, element, attrs) {

      // Load d3 service
      d3Service.d3().then(function(d3) {

        // Create svg variable
        var svg = d3.select(element[0])
          .append('svg')
          .style('width', '100%')
          .append('g');

        // Re-render on window resize
        window.onresize = function() {
          scope.$apply();
        };

        // Call render function on window resize
        scope.$watch(function() {
          return angular.element($window)[0].innerWidth;
        }, function() {

          // Works fine!
          console.log(scope);

          // Returns undefined!
          console.log(scope.data)

          scope.render(scope.data);
        });
        ...

添加了

代码语言:javascript
复制
  <div class="inner-module" ng-controller="DownloadsCloudCtrl">
    <div class="module-graph">
       <d3-cloud data="d3Data"></d3-cloud>
    </div>
  </div>

重要编辑:

问题变得越来越奇怪了。我刚刚刷新了页面,它完美地抓取了数据。再次刷新并再次接收undefined。我将尝试将变量名从数据更改为其他内容。

编辑2:

尝试更改变量名,它似乎不识别除data以外的任何参数.奇怪..。

EN

回答 1

Stack Overflow用户

发布于 2014-06-26 16:59:44

问题:

该指令是在http服务完成数据加载之前加载的。

解决方案:

添加一个ng-if条件,以确保数据在启动指令之前已经加载。

标记:

代码语言:javascript
复制
<div class="module-graph" ng-if="dataLoaded">
  <d3-cloud data="d3Data"></d3-cloud>
</div>

控制器内的

代码语言:javascript
复制
requestService.getP2PKeywordData(month, year).then(function(data) {
  $scope.d3Data = data.data;
  $scope.dataLoaded = true;
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24435484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档