0
我有一個自定義指令,它基於主控制器上的一個變量打開部分。如果您點擊某個部分的標題(標題),則會打開它並關閉其餘部分。但是當我在一個部分中有一個更新變量的按鈕時,它會恢復到舊值。angularjs:被監視的變量保持還原爲舊值
app.directive('sliders', function() {
return {
restrict: 'E',
transclude: true,
scope: {},
controller: function ($scope) {
$scope.sliders = [];
this.addSlider = function (section, element) {
$scope.sliders.push(section);
};
this.select = function (section) {
console.log(' select ' + $scope.$parent.stepToShow);
$scope.$parent.stepToShow = section.step;
};
},
template: '<div class="sliders" ng-transclude></div>'
};
})
.directive('sliderSection', function() {
return {
restrict: 'E',
require: '^sliders',
transclude: true,
scope: {
title: '@',
step: '@'
},
link: function (scope, element, attrs, slidersCtrl) {
scope.selected = function() {
return scope.step == scope.$parent.$parent.stepToShow;
};
scope.select = function() {
console.log('select() ' + scope.step);
slidersCtrl.select(scope);
};
slidersCtrl.addSlider(scope);
scope.$watch(function() { return scope.$parent.$parent.stepToShow; }, function (newVal, oldVal) {
console.log(' watch ' + scope.$parent.$parent.stepToShow);
if (newVal == scope.step) {
element.find('.slider-body').slideDown();
}
else {
element.find('.slider-body').slideUp();
}
});
},
template: '<div id="" class="slider-section" step="{{step}}" ng-click="select()">' +
'<div class="slider-header" >{{title}}</div>' +
'<div class="slider-body" ng-transclude></div>' +
'<div>'
};
});
它的更好,如果我告訴你,通過plunkr
http://plnkr.co/edit/aFMkWYmINb26M8cJFzgl?p=preview
啊,真好!謝謝!我不知道這種傳播。傳播是做什麼的?它只是選擇一個?另外,我應該爲這些使用多長時間? 1000?我一直在試圖找到超時的甜蜜點,但實際上找不到效率最高的。 – gdubs 2014-11-04 13:44:20
不需要任何時間設置,如果摘要正在進行,它只是將操作放在堆棧的末尾。事件冒泡(傳播)文檔。閱讀事件冒泡 – charlietfl 2014-11-04 14:01:26