2015-04-21 44 views
0

我有一個頁面,其中列出了主要內容區域中的多個「tiles」類型(<div>'s)以及包含充當過濾器的鏈接列表的頁眉。

E.g.在標題區域,點擊'pdf'過濾器鏈接 - 僅顯示ng-show="showFiles['pdf']的瓷磚。如果單擊「視頻」,則將顯示ng-show="showFiles['video']的圖塊等等。

標題模板由hdrController控制,而圖塊由pageController控制。

最初,當視圖加載$範圍可變showFilespageController從服務Tweaks其將所有項真接收對象(從而顯示出所有瓦片在啓動時):

testApp.controller('pageController', ['$scope', 'Tweaks', function($scope, Tweaks){ 
    $scope.showFiles = Tweaks.tagFilters('all'); 
}]); 

testApp.factory('Tweaks', function(){ 
    var tweaksFactory = {}; 
    var obj = {}; 

    tweaksFactory.tagFilters = function(filter) { 
    if(filter == 'all') { 
     obj = { 
     'video' : true, 
     'pdf' : true, 
     'doc' : true 
     }; 
    } else { 
     obj = { 
     'video' : false, 
     'pdf' : false, 
     'doc' : false 
     }; 
    } 
    return obj; 
    }; 
    return tweaksFactory; 
}); 

問題:當點擊過濾器鏈接,會應用一個檢測點擊的指令 - 然後需要更新$scope.showFiles以僅顯示具有特定過濾器類型的圖塊。

請參閱Plunkr - $scopepageController其中包含showFiles對象不會更新,所以更改不會反映出來。

有人可以提供任何建議嗎?我是Angular的新手 - 這種方法是實現結果的最佳方式嗎?

回答

1

你總是創建一個新的'obj' - 所以控制器中的引用不會被更新。無論如何,您應該始終通過服務功能訪問數據/狀態。 plnkr

testApp.factory('Tweaks', function(){ 
    var tweaksFactory = {}; 
    var obj = {}; 

    tweaksFactory.tagFilters = function(filter) { 
    if(filter == 'all') { 
     obj = { 
     'video' : true, 
     'pdf' : true, 
     'doc' : true 
     }; 
    } else { 
     obj = { 
     'video' : false, 
     'pdf' : false, 
     'doc' : false 
     }; 
     obj[filter] = true; 
    } 
    console.log('alter the object - so it reflects in the scope'); 
    console.log(obj); 
    return obj; 
    }; 
    tweaksFactory.show = function(type) { 
    console.log(obj, type); 
    return obj[type]; 
    }; 
    return tweaksFactory; 
}); 
1

有兩個或多個控制器通信與服務和活動完成後,你可以與廣播信息增加新的服務做

testApp.factory('mySharedService', function($rootScope) { 
    var sharedService = {}; 

    sharedService.prepForBroadcast = function(msg) { 
     $rootScope.$broadcast('handleBroadcast', msg); 
    }; 

    return sharedService; 
}); 

你可以看到你的代碼中使用這項服務允許指令與溝通更新控制器: http://plnkr.co/edit/M3RECJmZa64cxKtpWeHO?p=info

相關問題