2015-04-01 69 views
0

有一些項目在div頁:所有項目後如何在頁面中正確控制AngularJS的語言環境?

<body> 
<div id="block"> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
</div> 
<div class="modal"></div> 
</body> 

而且一個模塊class="modal"

我想,經過點擊.item顯示模式塊, 爲了這個,我已在母塊id="block"添加ng-controller="BlockController"

<div id="block" ng-controller="BlockController"> 
    ... 
</div> 

在模塊有一些按鈕,我想在控制器添加哪些方法實現Block Controller,但模態不在可見控制器的邊界。

我可以將同樣的控制器添加到:<div class="modal" ng-controller="BlockController"></div>以在一個控制器中實現通用功能嗎? 我試圖做到這一點,但得到可見$scope變量的麻煩在這種情況下:

AnJS

$scope.ClickSpam = function (id, type){ 
    $scope.id = id; // have value id 
} 

HTML模板:

{{id}} // here is not displayed value 
+0

爲什麼不使用包含所有div和modal的全局'div',那麼你可以在其上添加你的'ng-controller ='BlockController'',或者你可以簡單地將它放在你的'body'標籤上,在你的頁面上沒有其他控制器 – Khalid 2015-04-01 09:44:11

+0

如果使用全局不對,因爲我認爲每個控制器意味着分配函數lity。此外,我在頁面上有一些控制器,所以它看起來像任何控制器都在'BlockController'裏面。 – Sahe 2015-04-01 10:31:35

+0

但正如我所看到的,你的模態與你的'BlockConroller'有關,所以它應該被包含在那裏,不是嗎? – Khalid 2015-04-01 10:41:52

回答

0

一個你可以做的是解決方案的爲您的模態使用另一個控制器,其中包含自己的功能

<div class="modal" ng-controller="ModalController"></div> 

目前,BlockConroller裏面,你仍然可以訪問的ModalController$scope這樣的:

angular.element($(".modal")).scope(); // returns ModalController's $scope 

請注意,你有,如果你有很多情態動詞 與不同的控制器使用一個ID在你的模式。

那麼你的代碼將是這樣的:

的html代碼:

<div class="modal" id="modalId" ng-controller="ModalController"></div> 

javascript代碼:

angular.element($("#modalId")).scope(); // returns ModalController's $scope 

你可能會發現另一個問題,是你改變一個變量,它是從你的BlockController的ModalController範圍是這樣的:

angular.element($(".modal")).scope().id = "something"; 

{{ id }}約束力,除非你調用$apply方法不起作用:

angular.element($(".modal")).scope().$apply() 
+0

也許使用'directive'? – Sahe 2015-04-01 13:43:40