2015-04-21 46 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

相关问题