我是AngularJS的新手。我搜索了很多信息并找到一些适合我的好解决方案( AngularJS communication between directives )。第一个指令中的代码如下所示:
angular.module('app')
.directive('myItem', function () {
return {
templateUrl: 'views/item.html',
restrict: 'C',
controller: function ($scope, $element) {
$element.closest('.models-slider').on('afterChange', function(event, slick, currentSlide){
$scope.$emit('model:updated', currentSlide);
});
}
})
第二名:
angular.module('app')
.directive('model', function () {
return {
templateUrl: 'views/model.html',
restrict: 'E',
controller: function ($scope, $element) {
$scope.$on('model:updated', function(e, data){
$scope.item = data;
console.log('scope', $scope); // Here I see right value of item
});
});
}
});
但问题出在view / model.html中:
<div class="left-block">
<a class="back" href="#"></a>
<div class="model-wrapper">
<div class="front-view active">
<img src="images/model.png"/>
<img ng-if="item.frontImage" ng-src="{{ item.frontImage }}"/>
</div>
<a class="rotate"></a>
</div>
</div>
它没有更新。我的代码中有任何错误吗?如何更新我的观点?
答案 0 :(得分:0)
在model:updated
指令的scope.$apply
内发出“myItem
”,因为afterChange
是非角度事件
答案 1 :(得分:0)
你的问题不太清楚,我会尽量给你一些答案或提示:
首先,$scope.$on
不适合您在不同范围之间传递数据。为什么要对myItem
指令使用 C 的限制?你是如何使用这两个指令my-item
和model
的?你认为他们在哪里?
您可以在指令和控制器(或另一个指令的控制器)之间构建双向绑定。您需要在指令myItem
中创建一个独立的范围:
angular.module('app')
.directive('myItem', function () {
return {
templateUrl: 'views/item.html',
restrict: 'AEC',
scope: {
item: '=' //bi-directional binding
},
controller: function ($scope, $element) {
$element.closest('.models-slider').on('afterChange', function(event, slick, currentSlide){
// $scope.$emit('model:updated', currentSlide);
$scope.item = currentSlide;
});
}
})
在model
的指令模板中,您可以获取商品
<my-item item="item"></my-item>