Angular:将变量传递给指令

时间:2016-08-26 09:12:27

标签: javascript angularjs directive

我希望将一个变量从控制器传递给我创建的指令:

HTML

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(videoDidFinish:) 
    name:AVPlayerItemDidPlayToEndTimeNotification
    object:[controller.player currentItem]];

- (void)videoDidFinish:(id)notification
{
    AVPlayerItem *p = [notification object];
    //do something with player if you want

    [[NSNotificationCenter defaultCenter] removeObserver:self];

    //fade out / remove subview
}

指令

<div class="dropup inline-block" ng-repeat="event in video.events">
    <event video="video"></event>
</div>

问题是当我在返回的dict属性中添加 scope 时,它停止工作。

所以我的想法是当我在元素上传递鼠标时改变元素的颜色,其值为 video.color ,这是控制器$ scope中的一个变量。

我一直在寻找其他帖子的答案,但它们不起作用:

2 个答案:

答案 0 :(得分:1)

如果视频是对象,则添加video: '=video'
如果视频是字符串,则添加video: '@video'

.directive("event", function() {
    return {
      restrict: "E",
      replace: true,
      scope:{
        video: '=video'
      },
      template: '<a class="btn btn-default event-margin" ng-style="{color: video.iconColor, float: floatEvents}" type="button"  data-title="{{event.title}}"><span class="fa fa-fw {{event.icon}}"></span></a>',
      link: function(scope, elm, attrs) {
        elm
        .on('mouseenter', function() {
          elm.css('background-color', scope.video.color);
          elm.css('color','#FFFFFF');
        })
        .on('mouseleave', function() {
          elm.css('background-color','#FFFFFF');
          elm.css('color', scope.video.color);
        });
      }
    };

答案 1 :(得分:0)

好的,我找到了解决方案, video是控制器的范围变量。在返回的dict中将范围设置为false允许指令访问控制器的范围。

在此网站中解释:https://www.undefinednull.com/2014/02/11/mastering-the-scope-of-a-directive-in-angularjs/

  

当scope设置为“true”时,AngularJS将通过继承父作用域(通常是控制器作用域,否则是应用程序的rootScope)来创建新作用域。对此新范围所做的任何更改都不会反映回父范围。但是,由于新范围是从父范围继承的,因此在Ctrl1(父范围)中所做的任何更改都将反映在指令范围内。

     

当scope设置为“false”时,控制器Ctrl1和指令使用相同的范围对象。这意味着对控制器或指令的任何更改都将保持同步。