角度指令;
.directive('ngFilemanager',function () { return { restrict: 'EA',scope: { thefilter: '=',},link: function (scope,element,attrs) { },templateUrl: '/templates/filemanager.html',controller: FileManagerController }
HTML:
<div id="testcontainer" ng-controller="OtherController"> ... <div ng-click="vm.myfunction">Set Filter</div> ... <div id="thefilemanager" ng-filemanager thefilter=""></div> ... </div>
如何在OtherController的函数中设置过滤器值?
我尝试通过jquery设置属性值,但我的ng-view没有正确更新.
解决方法
你有双向隔离范围所以:
function OtherController($scope){ $scope.myfilter= ""; $scope.setFilter = function(what){ $scope.myfilter = what; } }
和HTML:
<div id="testcontainer" ng-controller="OtherController"> <div ng-click="setFilter('fun')">Set Filter</div> <div id="thefilemanager" ng-filemanager thefilter="myfilter"></div> </div>
然后当你在OtherController的范围内更改$scope.myfilter时,scope.thefilter会在你的指令范围内发生变化.
如果“其他”控制器不是直接父级,则可以使用$emit或$broadcast,具体取决于目标的位置.
以下是使用$broadcast的示例:
app.controller('MainCtrl',function($scope) { $scope.setFilter = function(what){ $scope.$broadcast('setFilter',what); } });
然后在你的指令里面你可以听:
link: function (scope,attrs) { scope.$on('setFilter',function(e,what){ scope.thefilter = what; }); },
为了使它在任何地方都可以工作,你可以从$rootScope广播$,但此时你可能想重新评估为什么你必须这样做. Angular本身做了很多,例如,routeChangeSuccess事件,但这并不意味着你应该这样做.