2015-09-15 51 views
4

该指令火灾:

simpleSearchApp.directive('afterResults', function($document) { 
return function(scope, element, attrs) { 
    if (scope.$last){ 
    scope.windowHeight = $document[0].body.clientHeight; 
    } 
}; 
}); 

我试图更新$scope.windowHeight一个新的价值,但我不能访问$scope指令内。

ng-repeat与HTML指令:

<div ng-show="items" class="ng-cloak" ng-repeat="item in items" after-results> 
    {{item}} 
</div> 

回答

0

说实话,我也不懂为什么它没有更新。但是在控制器中更新变量的替代方法是定义一个函数来更新变量并从指令中调用控制器中的那个函数。请看下面的例子,它可以帮助你。

angular.module('app',[]).controller('MyController',['$scope',function($scope){ 
 
    $scope.windowHeight = 0; 
 
    
 
    $scope.updateWindowHeight = function(height){ 
 
    $scope.windowHeight = height; 
 
    } 
 
    
 
}]) 
 
.directive('afterResults', function($document) { 
 
return function(scope, element, attrs) { 
 
    if (scope.$last){ 
 
     scope.windowHeight = $document[0].body.clientHeight; 
 
     scope.updateWindowHeight(scope.windowHeight);//calling function in controller 
 
    } 
 
}; 
 
}); 
 
    
 
<!DOCTYPE html> 
 
<html ng-app="app"> 
 

 
<head> 
 
    <script data-require="[email protected]" data-semver="1.4.1" src="https://code.angularjs.org/1.4.1/angular.js"></script> 
 
    <link rel="stylesheet" href="style.css" /> 
 
    <script src="script.js"></script> 
 
</head> 
 

 
<body ng-controller="MyController"> 
 
    <div class="ng-cloak" ng-repeat="item in [1,2,3,4,5]" after-results="updateWindowHeight()"> 
 
    {{item}} 
 
    </div> 
 
    <hr/>{{ "$scope.windowHeight ="+windowHeight}} 
 
</body> 
 

 
</html>