来自不同指令的角度变量操作

时间:2015-08-10 22:53:15

标签: angularjs angularjs-directive

我在角度无限卷轴上有点挣扎。我有一个对象数组,其中存储所有项目。此对象是指令控制器的一部分。

现在,当我尝试实现无限滚动时,我使用单独的指令来计算偏移量。我想从定义了对象数组的其他指令中访问此scroll指令变量。

我该怎么做?这里最简单的方法是什么?我正在寻找一周,找不到任何容易实现我的解决方案的东西。 谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用指令的require属性来获取另一个指令的控制器的$scope,或者使用指令的父控制器来传递共享值。以下是使用require (live demo)的示例。

<div ng-app="myApp">
  <foo></foo>
  <bar></bar>
</div>
angular.module('myApp', [])
.directive('foo', function() {
  return {
    controller: function($scope) {
      $scope.foo = 123;
    }
  };
})
.directive('bar', function() {
  return {
    require: '^foo',
    controller: function($scope) {
      console.log($scope.foo);
    }
  };
})
;

下一个示例的时间可能不是您想要的。它们共享相同的变量,但在第二个指令的控制器已经运行之后才会应用第一个指令控制器中$scope的更改。 (live demo).

<div ng-app="myApp" ng-controller="MyCtrl">
  {{sharedValue}}
  <foo shared-value="sharedValue"></foo>
  <bar shared-value="sharedValue"></bar>
</div>
angular.module('myApp', [])
.controller('MyCtrl', function($scope) {
  $scope.sharedValue = 'abc';
})
.directive('foo', function() {
  return {
    scope: {
      sharedValue: "="
    },
    controller: function($scope) {
      console.log($scope.sharedValue); // abc
      $scope.sharedValue = 123;
    }
  };
})
.directive('bar', function() {
  return {
    scope: {
      sharedValue: '='
    },
    controller: function($scope) {
      console.log($scope.sharedValue); // still abc, will update later
    }
  };
})
;