2017-02-13 44 views
1

我有一個問題,我似乎無法獲得屬性的值在我使用我的組件的控制器的範圍,所以如果我只是鍵入一個數字在作爲財產我得到預期的結果,但試圖做一些像$ctrl.val會給我undefined內我的主管,但3將給出正確的結果。有誰知道爲什麼會發生這種情況?角度1組件綁定不評估父控制器變量

我有一個組件是這樣的:

function RatingController() { 
    let vm = this 
    this.$onInit = function() { 
     console.log("rating: ", vm.rating) 
    } 
} 

export default { 
    bindings: { 
     rating: '=' 
    }, 
    controller: RatingController, 
    template: ` 
    <span>{{ $ctrl.rating }}</span 
    `, 
} 

然後我初始化這樣說:

<div ng-controller="MainCtrl as main"> 
    <star-rating rating="main.rating"></star-rating> 
</div> 

上面總會有等級與我的組件未定義但是這樣做會給出預期結果

<div ng-controller="MainCtrl as main"> 
    <star-rating rating="3"></star-rating> 
</div> 

MainCtrl:

export default function CakeController(requestCakes, $routeParams) { 
    let vm = this 
    requestCakes.getOne($routeParams.id).then((res) => { 
     //compose objects together 

     vm = Object.assign(vm, res.data) 
    }) 
} 
+0

你可以顯示'MainCtrl'代碼? –

+0

@BartekFryzowicz我已經將MainCtrl代碼添加到上面。評級屬性已被設置爲來自承諾的回報價值的一部分。現在我認爲問題可能是組件在返回承諾之前被初始化,這將解釋行爲。一旦新數據可用,是否有更新組件的方法? –

回答

1

您在組件中綁定了錯誤的屬性。您嘗試在組件配置綁定rating但你的組件屬性稱爲heartrating

答案更新時組件(異步您的主控制器的負載數據)初始化

main.rating價值尚未確定。嘗試使用$onChanges鉤子而不是$onInit。此外,您應該使用單向數據綁定(使用<而不是=),因爲無論何時更新單向綁定(根據角度docs),都會調用$onChanges掛接,並且在使用組件時不建議使用流行的雙向數據綁定

+0

感謝您查看Bartek,這實際上是我的部分沒有反映在實際代碼中的錯字。當我在這裏嘲笑代碼來問這個問題時,肯定是我犯了一個錯誤。 –

+0

非常感謝您幫助我解決這個問題!爲了完整起見,綁定是'$ onChanges',你給出了一個類型'$ onChange' –

+0

太好了,我很高興能幫上忙。至於鉤的名字你說得對,這只是一個錯字 - 固定的。 –