AngularJS - ng-hide with different ng-controller

后端 未结 2 696
生来不讨喜
生来不讨喜 2021-01-16 03:27

here is my problem : When I double click in a row of an array, I want to make disappear several parts of my page. The problem is...I don\'t figure out how to do this.

<
相关标签:
2条回答
  • 2021-01-16 03:58

    You can achieve this in simple way.

    In your case controller, mainWindow is the parent controller and controller, table is the child controller.

    Create an object for the parent controller and access or change the value from child controller on double click event.

    var app = angular.module('myapp',[]);
    app.controller('mainWindow',function($scope){
        $scope.parentobj = {};
        $scope.parentobj.hideAlias = false;
    });
    app.controller('table',function($scope){
        $scope.dblclicktest=function()
        {
            $scope.parentobj.hideAlias=true;
        }
    });
    

    and use the parent object scope in html to hide Div

    <div id="mainWindow" ng-hide="parentobj.hideAlias" ng-controller="mainWindow">
    

    Here is the JSFiddle

    In the JSFiddle, double click on AA will hide the div.

    0 讨论(0)
  • 2021-01-16 04:17

    the variable hideAlias doesn't exist on the mainWindow controller. What you want to do is share data between the mainWindow controller and the table controller.

    There's a few ways of doing this, I'll show you one

    Sharing data between controllers via Event emmiters

    At high level, controller Table will send data to Controller MainWindow, and controller Table is child of controller MainWindow, so here's how you do it with event emmiters:

        Controller mainWindow:
    
    
        $scope.$on('EventFromTableController',function(data){
    
              $scope.hideAlias = data.hideAlias;
    
        });
    

    This will tell controller mainWindow to listen for the EventFromTableController event. That event will contain data attached. In this case it will hold the hideAlias value from the child controller.

    Now at controller Table:

        Controller table:
    
        var tableHideAlias = true; // initialize it to true or false
    
        $scope.dblclick = function(){
            //change the local tableHideAlias state
            tableHideAlias = !tableHideAlias;
    
            // emit the new hideAlias value
            $scope.$emit('EventFromTableController',{hideAlias: tableHideAlias}); 
    
        }
    

    so when dblclick executes, it will send the new hideAlias value to the parent controller (mainWindow).

    This way, ng-hide will have a hideAlias scope variable to evaluate it's state.

    0 讨论(0)
提交回复
热议问题