2016-01-09 89 views
1


我已經經歷了大約一個月的角度。
我熟悉它的所有核心方面,但我遇到了一個我不明白的問題。
我有2個指令 - 一個是父母,另一個是孩子。
孩子從父母獲得3個參數 - 其中2個通過,但是當我調試和檢查第三個 - 它是未定義的。

兒童指令 -AngularJS雙向數據綁定不起作用

angular.module('management').directive('timeFrame', function() { 
return { 
    restrict: 'E', 
    templateUrl: '/Client/directives/timeFrame/timeFrame.html', 
    scope: { 
     timeFrame: '=', 
     deleteFrameFunction: '&', 
     index: '@' 
    } 

孩子指令在下列方式使用:

<div class="list-group-item" ng-repeat="timeFrame in ad.timeFrames"> 
    <time-frame index="{{$index}}" timeFrame="timeFrame" deleteFrameFunction="(function() {doStuff;})"></time-frame> 
</div> 

所有參數通過,但時間表是不確定的。
我試着改變了我將它傳遞給{{timeFrame}}ad.timeFrames[{{$index}}]以及許多其他失敗方式。

我需要使用雙向綁定傳遞此參數,因爲此僞指令將修改它,並且父指令必須知道它。

我沒有做過與其他指令相同的其他指令。

任何幫助/解釋將不勝感激,
在此先感謝。

+0

在HTML中,變量$指數應指數(沒有$) – Austio

+0

您是否嘗試過'ad.timeFrames [$指數]'? –

+0

順便說一句,而不是雙向綁定,你可以只傳遞值,然後使用'$ emit'發送一個事件給父?在父母範圍內,您可以通過'$ on'來收聽活動。 –

回答

0

您的命名約定不正確。綁定到指令作用域屬性時,適用於用於指令的連字符命名約定的camelCase。

time-frame="timeFrame" 

但是,由於這會與您的指令名稱衝突,因此應該使用不同的作用域屬性名稱。

指令:

scope: { 
    boundTimeFrame: '=', 
    deleteFrameFunction: '&', 
    index: '@' 
} 

模板:

<time-frame index="{{$index}}" bound-time-frame="timeFrame" 
    delete-frame-function="(function() {doStuff;})"></time-frame> 
+0

非常感謝,它工作。現在感覺有點傻。 我想知道deleteFrameFunction是如何通過的,即使命名約定對它也不正確? 再次感謝大衛。 – DotnetProg

+0

@DotnetProg正確,那也將是「不正確的」,但也只是從「樣式」的角度來看。它「工作」,因爲'&'允許您調用父函數並傳遞參數,而不是將父項的內容綁定到指令的隔離範圍。在這種情況下,「父功能」就是您定義的匿名功能,因此無需提及任何內容。 –

+0

我能想到的唯一解釋是你通過屬性引用它,而不是通過將範圍限定在範圍內。爲了將其綁定到範圍,它必須遵循適當的命名約定。 –