[英]Angular 1.5 components not getting variable passed to component
我是 Angular 1.5+ 中的 .component() 新手,我正在嘗試在頂級應用程序控制器中創建數據,並將其傳遞給子組件。 但是,在下面的示例中,打印到控制台給了我 undefined ,我不知道為什么。
索引.html
<!DOCTYPE html>
<html>
<head>
<script src="Scripts/angular.js"></script>
<script src="app.js"></script>
<title></title>
<meta charset="utf-8" />
</head>
<body ng-app="myApp" ng-controller="myController as vm">
<app name="vm.myName"></app>
</body>
</html>
應用程序.js
var app = angular.module("myApp", []);
app.controller("myController", ['$scope', function ($scope) {
console.log("myController!");
$scope.myName = "Rick";
}]);
app.component("app", {
template: '<h1>Hello World</h1>',
bindings: {
name: '='
},
controller: function () {
console.log(this.name); <-- prints undefined
}
});
問題是,在控制器中,您使用$scope
來定義傳遞到組件中的變量,但是,在 HTML 的控制器塊中,您使用this
語法將變量傳遞到組件中。
所以問題所在。
app.controller("myController", ['$scope', function ($scope) {
console.log("myController!");
$scope.myName = "Rick";
}]);
這是一個標准的scope
語法,但由於我們正在使用this
語法,因此我們需要它。
app.controller("myController", ['$scope', function ($scope) {
console.log("myController!");
this.myName = "Rick";
}]);
下面是一個工作示例。
這是因為您試圖過早地訪問它。 有一個名為$onInit
的組件生命周期鈎子。 所有綁定都將在該函數中解析,因此您可以使用它來訪問您的name
屬性。
嘗試將您的控制器修改為如下所示:
controller: () => {
this.$onInit = () => {
console.log(this.name);
}
}
$onChanges
在$onInit
之前運行。 您可以使用以下代碼塊簡單地檢查您的值何時傳遞給您的組件:
this.$onChanges = (changesObj) => {
if(changesObj.name && changesObj.name.currentValue) {
console.log(this.name);
}
}
您可能想進一步查看 angularjs 1.5+ 組件的文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.