如何记住 Ionic Range 滑块位置 $ionicPopup
How to remember Ionic Range slider position $ionicPopup
我有更改页面字体大小的指令:
.directive('textSizeSlider', ['$document', function ($document) {
return {
restrict: 'E',
template: '<div class="range"><i class="icon" ng-style="{ fontSize: min + unit }">A-</i><input type="range" min="{{ min }}" max="{{ max }}" step="{{ step || 0 }}" ng-model="textSize" value="{{ value }}" /><i class="icon" ng-style="{ fontSize: max + unit }">A+</i></div>',
scope: {
min: '@',
max: '@',
unit: '@',
value: '@',
step: '@'
},
link: function (scope, element, attr) {
scope.textSize = scope.value;
scope.$watch('textSize', function (size) {
var x = document.getElementsByTagName("P");
var i;
for (i = 0; i < x.length; i++) {
x[i].style.fontSize = size + scope.unit;
}
});
}
}
}]);
在我的页面上,通过按钮单击打开弹出窗口,范围为 decrease/increase 字体大小。但是每次当我打开 Popup range slider 时,我的控制器中都有默认位置设置值。如何保存 Range 的更改值?这是我在控制器中的功能:
$scope.fontAdjust = function() {
var alertPopup = $ionicPopup.alert({
title: 'Font adjustment',
template: '<text-size-slider min="10" max="18" unit="px" value="14" step="0"></text-size-slider>'
})
}
控制器中添加的内容:
在控制器中有一个 $scope.vm.fontSize
变量并像这样在您的模板中使用它
template: '<text-size-slider min="10" max="18" unit="px" value="vm.fontSize" step="0"></text-size-slider>'
你可以阅读Understanding Scopes知道我为什么使用vm.fontSize
而不是原始的fontSize
。
在控制器中添加手表以通知更改的值。这里更改的值可以保存在某个地方,例如在 localStorage
.
$scope.$watch('vm.fontSize', function (newValue, oldValue) {
console.log(newValue);
localStorage.fontSize = newValue;
});
然后在您的指令中使用以下代码:
return {
restrict: 'E',
template: '<div class="range"><i class="icon" ng-style="{ fontSize: min + unit }">A-</i><input type="range" min="{{ min }}" max="{{ max }}" step="{{ step || 0 }}" ng-model="value" /><i class="icon" ng-style="{ fontSize: max + unit }">A+</i></div>',
scope: {
min: '@',
max: '@',
unit: '@',
value: '=',
step: '@'
},
link: function (scope, element, attr) {
scope.textSize = scope.value; // This is not required
scope.$watch('value', function (size) {
var x = document.getElementsByTagName("P");
var i;
for (i = 0; i < x.length; i++) {
x[i].style.fontSize = size + scope.unit;
}
});
}
}
指令中的更改内容:
value: '@'
到 value: '='
。这是为了在外部范围内使用相同的引用,然后在指令范围内创建一个本地引用。 Read More.
- 在
template
属性 中,添加了 ng-model="value"
以将 value
(从外部作用域)直接绑定到 ng-model
并删除了 value
属性,因为 ng-model
会自动更新它,不需要。
- 直接在
value
上添加了监视,而不是在 textSize
上添加了监视,因此没有必要。
加载控制器时,您可以读取 localStorage.fontSize
并将其分配给 $scope.vm.fontSize
并在其值更改时将其保存回 localStorage.fontSize
。
我有更改页面字体大小的指令:
.directive('textSizeSlider', ['$document', function ($document) {
return {
restrict: 'E',
template: '<div class="range"><i class="icon" ng-style="{ fontSize: min + unit }">A-</i><input type="range" min="{{ min }}" max="{{ max }}" step="{{ step || 0 }}" ng-model="textSize" value="{{ value }}" /><i class="icon" ng-style="{ fontSize: max + unit }">A+</i></div>',
scope: {
min: '@',
max: '@',
unit: '@',
value: '@',
step: '@'
},
link: function (scope, element, attr) {
scope.textSize = scope.value;
scope.$watch('textSize', function (size) {
var x = document.getElementsByTagName("P");
var i;
for (i = 0; i < x.length; i++) {
x[i].style.fontSize = size + scope.unit;
}
});
}
}
}]);
在我的页面上,通过按钮单击打开弹出窗口,范围为 decrease/increase 字体大小。但是每次当我打开 Popup range slider 时,我的控制器中都有默认位置设置值。如何保存 Range 的更改值?这是我在控制器中的功能:
$scope.fontAdjust = function() {
var alertPopup = $ionicPopup.alert({
title: 'Font adjustment',
template: '<text-size-slider min="10" max="18" unit="px" value="14" step="0"></text-size-slider>'
})
}
控制器中添加的内容:
在控制器中有一个
$scope.vm.fontSize
变量并像这样在您的模板中使用它template: '<text-size-slider min="10" max="18" unit="px" value="vm.fontSize" step="0"></text-size-slider>'
你可以阅读Understanding Scopes知道我为什么使用
vm.fontSize
而不是原始的fontSize
。在控制器中添加手表以通知更改的值。这里更改的值可以保存在某个地方,例如在
localStorage
.$scope.$watch('vm.fontSize', function (newValue, oldValue) { console.log(newValue); localStorage.fontSize = newValue; });
然后在您的指令中使用以下代码:
return {
restrict: 'E',
template: '<div class="range"><i class="icon" ng-style="{ fontSize: min + unit }">A-</i><input type="range" min="{{ min }}" max="{{ max }}" step="{{ step || 0 }}" ng-model="value" /><i class="icon" ng-style="{ fontSize: max + unit }">A+</i></div>',
scope: {
min: '@',
max: '@',
unit: '@',
value: '=',
step: '@'
},
link: function (scope, element, attr) {
scope.textSize = scope.value; // This is not required
scope.$watch('value', function (size) {
var x = document.getElementsByTagName("P");
var i;
for (i = 0; i < x.length; i++) {
x[i].style.fontSize = size + scope.unit;
}
});
}
}
指令中的更改内容:
value: '@'
到value: '='
。这是为了在外部范围内使用相同的引用,然后在指令范围内创建一个本地引用。 Read More.- 在
template
属性 中,添加了ng-model="value"
以将value
(从外部作用域)直接绑定到ng-model
并删除了value
属性,因为ng-model
会自动更新它,不需要。 - 直接在
value
上添加了监视,而不是在textSize
上添加了监视,因此没有必要。
加载控制器时,您可以读取 localStorage.fontSize
并将其分配给 $scope.vm.fontSize
并在其值更改时将其保存回 localStorage.fontSize
。