get access to $scope in ng-if

2019-09-14 22:59发布

问题:

What is the better approach to get access to scope created by ng-if in my directive (without $parent.params.text):

<span ng-if="params" uib-tooltip="{{params.text}}"></span>

.directive('myDirective', functions(){
   return {
      templateUrl: 'template.html',
      replace: true,
      $scope: {
         data: '='
      },
      controller: function(){
          if (data) { //some logic
             $scope.params.text = 'text'
          }
      }
   }
})

回答1:

I've noticed that I don't have to use $parent if my variable is nested inside an object.

For example:

controller $scope.params = { ... }

view ng-if="params"

Won't work, but:

controller

$scope.something_here = {};
$scope.something_here.params = { ... }

view ng-if="something_here.params"

would work. I believe Angular preserves the scope if the key you're trying to access is part of an object. Give it a try!



回答2:

You could use the controllerAs syntax.

add

controllerAs: "vm",
bindToController: true

as properties in your directive definition and replace $scope with vm. Then refer to vm.params.text inside the ng-if