Angularjs 嵌套指令顺序
Angularjs Nested Directive Order
我正在将高级 HTML 主题翻译成 Angularjs 应用程序。我已经加载 angular-flexslider 并且可以正常工作,但主题使用自定义 Jquery 逻辑来控制滑块的布局。
我创建了一个包含 Jquery 逻辑的自定义指令,它大部分都在工作。我遇到的唯一问题是自定义指令在 angular-flexslider 指令之前触发并获取标签 {{img.src}} 而不是图像 URL.
我已经查看了指令优先级设置,但没有任何运气。
在执行之前强制自定义指令等待 angular-flexslider 指令完成其 DOM 操作的正确方法是什么?
编辑:
下面是 flex-slider 指令的 HTML。我的指令 (flex-slide
) 需要应用于 li
元素。该指令有效,但 img-src 作为 {{slide.src}}
传递,而不是被 flex-slider 指令替换为 URL。对我来说这看起来像是一个简单的解析顺序问题,但我对 Angular 的了解还不够多,无法弄清楚。
<flex-slider slider-id="home-slider" slide="slide in slides track by slide.src" direction-nav="false" animation-speed="400" added="initSlide()">
<li class="has-parallax cover-bg" flex-slide img-src="{{slide.src}}">
<div class="row slide-content text-center">
<div class="medium-12 medium-centered columns">
<img class="headline-logo" alt="logo" src="assets/images/logo-white.png" />
<div class="home-title offix">
<div class="title-upper offix">
<h6 class="left alt-h text-white">Header 1</h6>
<h6 class="right alt-h text-white">Header 2</h6>
</div>
<h1 class="headline">Brand</h1>
<div class="title-lower">
<p class="text-white"><em>Tagline</em></p>
</div>
</div>
</div>
</div>
<div class="slide-overlay"></div>
<img ng-src="{{slide.src}}" class="slider-bg" />
</li><!--end of individual slide-->
</flex-slider>
指令:
'use strict';
angular.module('app')
.directive('flexSlide', [function () {
return {
restrict: "A",
scope: {
imgSrc:'=imgSrc'
},
link: function (scope, element, attr) {
// DO JQUERY STUFF HERE with imgSrc attr
}
}
}]
);
我认为您在指令代码中使用了 {{img.src}}。您应该将 url 作为属性传递到您的自定义指令中。
如果你想在 flexslider 指令中使用嵌套指令,比如使用自定义指令,你可以参考 this
我终于意识到指令可以访问父作用域。由于 angular-flexslider 指令用作循环,因此我可以直接从我的自定义指令中的循环访问范围变量,如下所示。
'use strict';
angular.module('perspectiveUas')
.directive('flexSlide', [function () {
return {
restrict: "A",
link: function (scope, element, attr) {
// DO JQUERY STUFF HERE
// $scope.slide is available from parent scope.
}
}
}]
);
我正在将高级 HTML 主题翻译成 Angularjs 应用程序。我已经加载 angular-flexslider 并且可以正常工作,但主题使用自定义 Jquery 逻辑来控制滑块的布局。
我创建了一个包含 Jquery 逻辑的自定义指令,它大部分都在工作。我遇到的唯一问题是自定义指令在 angular-flexslider 指令之前触发并获取标签 {{img.src}} 而不是图像 URL.
我已经查看了指令优先级设置,但没有任何运气。
在执行之前强制自定义指令等待 angular-flexslider 指令完成其 DOM 操作的正确方法是什么?
编辑:
下面是 flex-slider 指令的 HTML。我的指令 (flex-slide
) 需要应用于 li
元素。该指令有效,但 img-src 作为 {{slide.src}}
传递,而不是被 flex-slider 指令替换为 URL。对我来说这看起来像是一个简单的解析顺序问题,但我对 Angular 的了解还不够多,无法弄清楚。
<flex-slider slider-id="home-slider" slide="slide in slides track by slide.src" direction-nav="false" animation-speed="400" added="initSlide()">
<li class="has-parallax cover-bg" flex-slide img-src="{{slide.src}}">
<div class="row slide-content text-center">
<div class="medium-12 medium-centered columns">
<img class="headline-logo" alt="logo" src="assets/images/logo-white.png" />
<div class="home-title offix">
<div class="title-upper offix">
<h6 class="left alt-h text-white">Header 1</h6>
<h6 class="right alt-h text-white">Header 2</h6>
</div>
<h1 class="headline">Brand</h1>
<div class="title-lower">
<p class="text-white"><em>Tagline</em></p>
</div>
</div>
</div>
</div>
<div class="slide-overlay"></div>
<img ng-src="{{slide.src}}" class="slider-bg" />
</li><!--end of individual slide-->
</flex-slider>
指令:
'use strict';
angular.module('app')
.directive('flexSlide', [function () {
return {
restrict: "A",
scope: {
imgSrc:'=imgSrc'
},
link: function (scope, element, attr) {
// DO JQUERY STUFF HERE with imgSrc attr
}
}
}]
);
我认为您在指令代码中使用了 {{img.src}}。您应该将 url 作为属性传递到您的自定义指令中。
如果你想在 flexslider 指令中使用嵌套指令,比如使用自定义指令,你可以参考 this
我终于意识到指令可以访问父作用域。由于 angular-flexslider 指令用作循环,因此我可以直接从我的自定义指令中的循环访问范围变量,如下所示。
'use strict';
angular.module('perspectiveUas')
.directive('flexSlide', [function () {
return {
restrict: "A",
link: function (scope, element, attr) {
// DO JQUERY STUFF HERE
// $scope.slide is available from parent scope.
}
}
}]
);