我希望将一个变量从控制器传递给我创建的指令:
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中的一个变量。
我一直在寻找其他帖子的答案,但它们不起作用:
答案 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和指令使用相同的范围对象。这意味着对控制器或指令的任何更改都将保持同步。