2014-09-07 25 views
1

例子:

<div ng-controller="ParentCtrl as parent" class="ng-scope"> 
    { { parent.data } } 
    <div ng-controller="SiblingOneCtrl as sib1" class="ng-scope"> 
     { { sib1.data } } 
    </div> 
</div> 


<script> 
function ParentCtrl ($scope) { 

    $scope.$broadcast('parent', 'Some data'); // идет вниз! 

} 
function SiblingOneCtrl ($scope) { 

    $scope.$on('parent', function (event, data) { 
    console.log(data); // ‘Some data’ 
    }); 
} 
</script> 

下載在這個論壇的樣本和人寫它的工作

打開控制檯,我還沒有看到任何效果 等待提示..thank你無動於衷的人

+4

可能是因爲兄弟之前其發射被初始化。在parentctrl中用$ timeout嘗試它。 – foxx

+2

試着把你的腳本放在'$(document).ready'函數中 – Farshad

+1

謝謝foxx ..... Works ... –

回答

4

恰巧很可能是因爲它在兄弟姐妹甚至創建之前就會觸發廣播。

一)不立即播出,例如使用延遲($timeout)..

b)或將數據傳遞一些其他的方式,使用原型繼承甚至是一種服務(您在設置父並獲得它在兄弟姐妹)

c)你最有可能想要在ng點擊或什麼東西播放的東西,不是嗎?在這種情況下,它應該可以正常工作。

4

福克斯告訴權與$超時在parentctrl嘗試,因爲:

function ParentCtrl ($scope,$timeout) { 
this.data="r"; 
$timeout(function(){ 
    $scope.$broadcast('parent', 'Some data'); // идет вниз! 
},1000) 


} 
function SiblingOneCtrl ($scope) { 

    $scope.$on('parent', function (event, data) { 
    console.log(data); // ‘Some data’ 
    }); 
} 

see plunker的工作代碼

+3

$ timeout沒有需要1000延遲,甚至0毫秒都可以工作 –