2017-02-15 47 views
4

我正在使用Angular 1.5.7版本。Angular bindToController不工作,可以將對象從一個控制器範圍綁定到另一個

我有一個指令,將控制器名稱和視圖名稱作爲字符串分別調用控制器。

我無法將用戶名與前一個控制器的調用控制器綁定,我在前一個控制器中看到可用值。

請問您可以提出什麼問題?

myApp.directive("pendingRequests", function() { 
    return { 
     restrict: 'E', 
     controller: "@", 
     name: "controllerName", 
     controllerAs: 'pendingReqCtrl', 
     scope: {}, 
     bindToController: { 
      username: '=username' 
     }, 
     templateUrl: function(tElement, tAttrs) { 
      return tAttrs.templateUrl; 
     } 
    }; 
}); 
+0

我不明白你的問題,但在我看來,你想從父範圍訪問控制器。在這種情況下,「require」指令標籤將使您可以訪問父控制器。 – otaviodecampos

回答

4

您是否嘗試使用$ onInit來初始化您的代碼?

angularjs doc says this

棄用警告:雖然非ES6類控制器 綁定的控制器構造函數是 調用之前當前綁定到這個,這個用現在已經過時。請放置初始化代碼 ,該代碼依賴於控制器上的$ onInit方法中的綁定,而代之以 。

我更新到1.6.2,我不得不把我的代碼放到$ onInit方法來訪問綁定。

+0

Angular 1.6.2添加了「生命週期鉤子」。在早期版本中,您可以訪問控制器構造函數上的作用域綁定。 – otaviodecampos

+0

此棄用警告已從新版本中消失,您無法在其上找到足夠的信息。 –

7

謝謝 @westor你救了我的一天。我剛剛更新了我的角度,並開始得到這個問題,花了很多時間修復它,然後我發現了這一點。所以想到舉一些例子。

使用$在您的控制器功能的OnInit綁定範圍

controller: function() { 
    this.$onInit = function() { 

    // your business logic 

    }; 
}; 

在我的應用程序,我是通過使用需要範圍

myApp.directive('pendingRequests', function() { 
    return { 
    scope: { 
     item:'=' 
    }, 
    bindToController: true, 
    controller: controller, 
    controllerAs: 'vm', 
    controller: function ($scope) { 
     console.log(this.item); // doesn't logs 

     this.$onInit = function() { 
     console.log(this.item); // logs your other directives object 
     }; 
    } 
    } 
}); 

結合

myApp.directive('pendingRequests', function() { 
    return { 
    scope: {}, 
    bindToController: {}, 
    controller: controller, 
    controllerAs: 'pendingReqCtrl', 
    require: { 
     parent: '^otherDirective' 
    }, 
    controller: function ($scope) { 
     console.log(this.parent); // doesn't logs 

     this.$onInit = function() { 
     console.log(this.parent); // logs your item object 
     }; 
    } 
    } 
}); 
相關問題