0

この例を考えると:

var SomeApp = angular.module('SomeApp', [])
  .controller('SomeController', function($scope){
    $scope.items = [0,1,2,3]
  })
  .directive('gridResize', function(){
    return {
      scope: true,
      link: function(scope, elem) {
        scope.gridResize = {
          width: $(elem).width(),
          height: $(elem).height()
        };
      }
    }
  })
.parent {
  width: 80%;
  position: relative;
  left: 50%;
  transform: translateX(-50%);
  border: 1px solid red;
}
.parent > * {
  background-color: rgba(0,0,0,.14);
  margin-bottom: 1px;
  padding: 20px;
  box-sizing: border-box;
}
.parent > *:last-child {
  margin-bottom: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="SomeApp">
  <div class="parent" ng-controller="SomeController" grid-resize>
    <div ng-style="{'min-height':($parent.gridResize.width/8) + 'px'}" 
         ng-repeat="item in items"
         >
      height: {{$parent.gridResize.height}} | width: {{$parent.gridResize.width}}
    </div>
  </div>
</div>

grid-resizeディレクティブの高さと幅を DOM 要素にバインドする方法を誰か教えてもらえますか? DOM 要素が変更されたときに角度プロパティを変更したい。

4

1 に答える 1

1

ディレクティブで、ウィンドウの「サイズ変更」イベントを使用して、スコープのサイズを更新します。

var SomeApp = angular.module('SomeApp', [])
  .controller('SomeController', function($scope){
    $scope.items = [0,1,2,3]
  })
  .directive('gridResize', function(){
    return {
      scope: false,
      link: function(scope, elem) {
        scope.gridResize = {
          width: $(elem).width(),
          height: $(elem).height()
        };
        angular.element(window).on('resize', function(e) {
           scope.gridResize = {
              width: $(elem).width(),
              height: $(elem).height()
           };
           scope.$apply();
        });
      }
    }
  })

また、ディレクティブのスコープを「false」に変更したことにも注意してください。ng-controllerディレクティブによって作成されたその要素のスコープが既にあります。

于 2016-01-04T13:22:58.200 に答える