0

所以我有一個指令隔離範圍controllerAs模式。綁定有時

var directive = { 
     restrict: 'E', 
     scope: { 
      something: '=' 
     }, 
     templateUrl: './App/directiveTemplate.html', 
     controller: directiveController, 
     controllerAs: 'vm', 
     bindToController: true 
    } 

,並在控制器我打電話初始化使用$ HTTP返回一個承諾REST服務。

function directiveController(someService) { 

    var vm = this; 

    // Here vm.something is defined and bound to the appropriate model set where the directive is used 

    init() 

    function init() { 
     return someService.getProducts() 
     .then(productsReady); 

     function productsReady(response) { 
      vm.products = response; 
      //find product using vm.something 

      // here vm.something is undefined 

      return vm.products; 
     } 
    } 

的問題是,如果我的init()方法vm.something之前斷點是這樣定義應該是,但在productsReady功能它是不確定的。

這是正常行爲嗎?承諾是否在不同的範圍內解析代碼?

+1

的'productsReady()'函數在'的init()'方法中定義的。它在本地範圍內。你爲什麼期望它被定義在'init()'之外? –

+0

您是否想了解JavaScript變量作用域?還是有什麼你想要做的,不工作? –

+0

@JCFord我不是Javascript的專家。 init方法可以訪問範圍,所以我假定在init中定義的方法也可以以某種方式繼承。猜猜這不是真的? –

回答

1

使用$onInit Life-Cycle Hook保證綁定的定時:

function directiveController(someService) { 

    var vm = this; 

    ̶i̶n̶i̶t̶(̶)̶ 

    this.$onInit = init; 

    function init() { 
     return someService.getProducts() 
     .then(productsReady); 

     function productsReady(data) { 
      vm.products = data; 

      return vm.products; 
     } 
    } 

從文檔:

依賴於綁定存在應放在控制器的 $onInit()方法,該方法是

初始化邏輯保證在之後總是被稱爲已經分配了綁定。

.component('myComponent', { 
    bindings: {value: '<'}, 
    controller: function() { 
    this.$onInit = function() { 
     // `this.value` will always be initialized, 
     // regardless of the value of `preAssignBindingsEnabled`. 
     this.doubleValue = this.value * 2; 
    }; 
    } 
}) 

— AngularJS Developer Guide - Migrating to V1.6 - $compile

+0

我會看看這個,但我認爲綁定實際上是解決的,但是由於某種不同的原因而未定義。但無論如何,這是一個好主意,也許我該怎麼做。 –

+0

這是標題中描述的問題的其他用戶的標準答案。你寫的問題不能提供足夠的信息來重現問題。 – georgeawg

+0

的確,我的問題必須位於綁定某處的另一邊。我沒有編寫我正在編寫的代碼,所以我不得不看一看。但也許我應該將其標記爲稍後瀏覽器的答案。 –