2015-04-03 34 views
0

我有一個名爲搜索條件的表單。此表單位於頁面的左側,並管理將哪些條件發佈回服務器。我可以很容易地將這個表格包裝在自己的控制器中。但是我在頁面中的一個完全不同的地方有一個下拉菜單,這也是發送到服務器的標準的一部分。如何管理作爲同一對象的一部分,但放置在AngularJs DOM不同部分的數據?

現在我已經創建了每個部分的兩個不同的控制器和我也有一個工廠管理所述組合的搜索標準時,第一頁被加載的時候,或者當它在任何這些兩個控制器的變化。

我會採取正確的做法還是有更好的辦法?

有直接在我的DOM綁定使用來自工廠的數據嗎?

enter image description here

+0

我敢肯定,這是正確的做法。如果您定義了一個剛剛插入服務/工廠當前值的指令,那麼DOM綁定會更直接。 – 2015-04-03 11:19:35

+0

這是正確的做法。你不應該直接綁定服務來查看。它應該通過控制器。而作爲需要對數據進行多個控制器之間共享,那麼服務是最好的地方 – mohamedrias 2015-04-03 11:23:03

回答

1

正確的,你是在正確的方向,看看這都是我爲你創建的,在我的範圍變量,它提供了訪問服務變量增值服務的Plunkr。服務內部的對象將很容易在視圖中訪問。

HTML

<div ng-controller="Ctrl1" style="float: left"> 
    Upper Section 
    <div ng-repeat="i in [1,2,3,4,5]" ng-class="{green: dataService.data.selected == i, red: dataService.data.selected != i}" 
    ng-click="dataService.data.selected = i" ">{{i}}</div> 
    {{dataService}} 
<div> 

<div ng-controller="Ctrl2 " style="float: right "> 
    Bottom Section 
    <div ng-repeat="i in [1,2,3,4,5] " ng-class="{green: dataService.data.selected==i , red: dataService.data.selected !=i } " 
    ng-click="dataService.data.selected=i ">{{i}}</div> 
    {{dataService}} 
<div> 

代碼

angular.module('app',[]) 
.controller('Ctrl1', function($scope, dataService){ 
    $scope.dataService = dataService; 
}) 
.controller('Ctrl1', function($scope,dataService){ 
    $scope.dataService = dataService; 
}). 
service('dataService', function(){ 
    this.data = {}; 
    this.getData = function(){ 
    return this.data; 
    }; 
    this.setData = function(val){ 
    this.data = val; 
    }; 
}); 

Working Plunkr

+0

如何'NG點擊=「dataService.data.selected = i'更改值,而不調用'setData'? – 2015-04-03 11:50:50

+0

@RustyShackleford因爲控制器範圍有業務數據的完整副本,你也可以使用'setData'方法。 – 2015-04-03 11:53:55

+0

是'.selected'調用'setData'一種含蓄的方式。我沒有看到其他data'獲取的是如何'更新。 – 2015-04-03 12:16:31

相關問題