无法更新函数内的变量值 angularjs
Can't update variable value inside function angularjs
您好,开发人员请帮忙,在传入 html 标记的 angularjs 控制器中动态更新值完美运行。但是当我在函数内部(在控制器内)使用范围变量时。
在函数外更新值时工作完美:
var app = angular.module('previewApp', []);
app.controller('previewCtrl', function ($scope) {
var $ = jQuery;
var targetValue = 0;
$scope.w = targetValue;
});
传递给 html 跨度标签:
<span style="width:{{w}}px;height:{{h}}px; background-color: white" class="item-inner">
但是只要输入事件触发值没有在函数内部动态更新,我就会使用 jQuery 获取值,在控制台中值正在完美更新 (console.log('Width ' + targetValue); ) 但不在 html 标签中:
function onChangeWidth(event) {
if (event.which != 8 && event.which != 0 && (event.which < 48 || event.which > 57)) {
isProcess = false;
}
const targetValue = $(this).closest('.gfield').find('input').val();
// $scope.width = ;
$scope.w = function () {
return targetValue;
};
$scope.docPPIWidth = ppi * +targetValue;
console.log('Width ' + targetValue);
$scope.w = targetValue; //updating w didn't work inside function
}
function onChangeHeight(event) {
const targetValueH = $(this).closest('.gfield').find('input').val();
if (event.which != 8 && event.which != 0 && (event.which < 48 || event.which > 57)) {
var isProcess = false;
}
$scope.docPPIHeight = ppi * targetValueH;
console.log('Height ' + targetValueH);
}
$('.width_check input').on('change click', onChangeWidth);
$('.height_check input').on('change click', onChangeHeight);
我给你的第一个建议是开始考虑如何防止混合 JQuery 和 AngularJS,因为最终你会以“bug 末日”告终。
我认为你的情况是 Angular 不知道 JQuery 触发了一个事件,所以摘要循环不会自动触发。
同样,此解决方案可以在特定情况下为您提供帮助,但这确实不是一个好的做法:
$scope.w = targetValue;
$scope.$digest();
更改范围变量后,让 Angular 知道它必须通过添加 $scope.$digest()
触发摘要循环来刷新视图数据。此函数将仅检查此组件及其子范围数据。如果您需要检查整个应用程序,请使用 $rootScope.$digest()
(从性能的角度来看非常糟糕的决定)。
您好,开发人员请帮忙,在传入 html 标记的 angularjs 控制器中动态更新值完美运行。但是当我在函数内部(在控制器内)使用范围变量时。
在函数外更新值时工作完美:
var app = angular.module('previewApp', []);
app.controller('previewCtrl', function ($scope) {
var $ = jQuery;
var targetValue = 0;
$scope.w = targetValue;
});
传递给 html 跨度标签:
<span style="width:{{w}}px;height:{{h}}px; background-color: white" class="item-inner">
但是只要输入事件触发值没有在函数内部动态更新,我就会使用 jQuery 获取值,在控制台中值正在完美更新 (console.log('Width ' + targetValue); ) 但不在 html 标签中:
function onChangeWidth(event) {
if (event.which != 8 && event.which != 0 && (event.which < 48 || event.which > 57)) {
isProcess = false;
}
const targetValue = $(this).closest('.gfield').find('input').val();
// $scope.width = ;
$scope.w = function () {
return targetValue;
};
$scope.docPPIWidth = ppi * +targetValue;
console.log('Width ' + targetValue);
$scope.w = targetValue; //updating w didn't work inside function
}
function onChangeHeight(event) {
const targetValueH = $(this).closest('.gfield').find('input').val();
if (event.which != 8 && event.which != 0 && (event.which < 48 || event.which > 57)) {
var isProcess = false;
}
$scope.docPPIHeight = ppi * targetValueH;
console.log('Height ' + targetValueH);
}
$('.width_check input').on('change click', onChangeWidth);
$('.height_check input').on('change click', onChangeHeight);
我给你的第一个建议是开始考虑如何防止混合 JQuery 和 AngularJS,因为最终你会以“bug 末日”告终。 我认为你的情况是 Angular 不知道 JQuery 触发了一个事件,所以摘要循环不会自动触发。 同样,此解决方案可以在特定情况下为您提供帮助,但这确实不是一个好的做法:
$scope.w = targetValue;
$scope.$digest();
更改范围变量后,让 Angular 知道它必须通过添加 $scope.$digest()
触发摘要循环来刷新视图数据。此函数将仅检查此组件及其子范围数据。如果您需要检查整个应用程序,请使用 $rootScope.$digest()
(从性能的角度来看非常糟糕的决定)。