javascript - 为什么以下范围变量在我的指令中没有变为未定义?

标签 javascript angularjs

我正在尝试获取 panodatas 的值(在我的 Controller 中定义为$scope.panodatas)并在link中使用它我的指令部分:

JS:

scope: {
        floorplan: "@",
        points: "=",
        panodatas: "=",
        getPanos: "&"
      },
      link: function(scope, element, attrs) {
        console.log(scope.panodatas)
        scope.getPanos().then(function() {
          console.log(scope.panodatas)

HTML:

  <pre>{{panodatas | json}}</pre>
  <panodata-editor
    floorplan="http://ac-x69r2ohx.clouddn.com/3171600a0de6f740c152.jpg"
    points="points"
    panodatas="panodatas"
    get-panos="getPanos()"
  >
  </panodata-editor>

但是这不起作用,两个 console.log(scope.panodatas)返回undefined 。为什么是这样?我怎样才能得到$scope.panodatas的值并在 link: function() {...} 中使用它?

注意:

<pre>{{panodatas | json}}</pre>正在工作,所以 panodatas确实有这样的值(value):

[
  {
    "objectId": "56a74de0d342d30054170231",
    "index": 2,
    "x": 200,
    "y": 200,
    "createdAt": "2016-01-26T10:43:44.482Z"
  },
  {
    ...
  },
  ...

编辑:

这就是panodatas正在我的 Controller 中定义:

var all = function() { return $q.all([serviceUpload.getAllBuilding(isUpdated)]) }

$scope.getPanos = function() {
  return all().then(function(value) {
    $scope.buildingTree = JSON.parse(value)
    $scope.panoId = $routeParams.panoId
    $scope.pano = _($scope.buildingTree).chain().
    pluck('pano').
      flatten().
      findWhere({objectId: $scope.panoId}).
      value()
    $scope.panodatas = $scope.pano.panoData
  }, function(reason) {
    $scope.result = reason
  })
}

最佳答案

因为链接器运行时是在 promise 随 panodatas 返回之前。

关于javascript - 为什么以下范围变量在我的指令中没有变为未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35027226/

相关文章:

javascript - 如何将复选框值作为数组?

javascript - 通过 JavaScript 立即更改大小时,CSS 过渡不会动画

angularjs - 为什么 $rootScope.$new 不让模板进入指令?

javascript - 修改指令中的模板(动态添加另一个指令)

javascript - Sequelize 播种机找不到模型的正确列名称

javascript - Chartjs x 轴缩放

javascript - Angular 2路由错误无法使用 "in"运算符在null中搜索 "providers"

javascript - angularjs无法在链接函数内分配作用域变量

session - 通过 Angular.js 维护 session

javascript - 根据相邻元素的大小或值隐藏 flexbox 元素