1

我有一个表单,你可以用它来编辑图片库,当然我已经为它创建了一个指令,如下所示:

画廊编辑.html

<div>
  <form ng-submit="submit()">
    <label>Headline:</label>
    <input type="text" ng-model="gallery.headline" placeholder="Enter headline here" value=""/>

    <label>channels:</label>
    <channelselect></channelselect>

    <input type="submit"/>
  </form>
</div>

因此,galleryEdit 有另一个指令 channelSelect,您可以使用它选择一个频道(不仅适用于画廊)

频道选择.html

<div>
  <select>
      <option value="{{channel.shortCode}}">{{channel.name}}</option>
  </select>
</div>

GalleryEdit 有一个控制器,它为其指令传递数据(称为“gallery”),因此它的 $scope 具有 $scope.gallery 属性,其中包含通道 id:$scope.gallery.channel。由于 channelselect 有不同的控制器,它有它的范围,这个 gallery.channel 不能从那个范围看到。有没有办法将数据从画廊传递到通道控制器/指令?使用 $scope.$parent 不是一个解决方案,因为 channelSelect 不应该知道数据来自哪里。

4

1 回答 1

6

galleryEdit您可以在指令范围和指令范围之间设置双向绑定channelselect

channelselect指令的定义中,您可以执行以下操作:

directive('channelselect', [function () {
    ...
    scope: {channel: '='}
    ...
}])

这将为您的指令创建一个隔离范围channelselect,并允许您使用标签channel上的属性<channelselect>来设置与其父范围的双向绑定。

所以现在你可以这样做galleryEdit.html

<channelselect channel="gallery.channel"></channelselect>

现在channelselect's$scope.channel将被绑定到galleryEdit's $scope.gallery.channel.

有关隔离范围的更多详细信息,请参阅AngularJS指令指南的指令定义对象部分。

于 2013-02-04T14:19:35.247 回答