加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 设置来自另一个控制器的angular指令的属性值

发布时间:2020-12-17 17:18:35 所属栏目:安全 来源:网络整理
导读:角度指令; .directive('ngFilemanager',function () { return { restrict: 'EA',scope: { thefilter: '=',},link: function (scope,element,attrs) { },templateUrl: '/templates/filemanager.html',controller: FileManagerController } HTML: div id="tes
角度指令;

.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事件,但这并不意味着你应该这样做.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读