您好,我有关注代码
HTML:
<div ng-app="myApp" ng-controller="myController">
<input ng-model="value">
<button ng-click="checkValue()">Check value</button>
</div>
控制器:
angular.module("myApp", []).controller("myController", function($scope) {
$scope.value = '';
$scope.acceptedValuesList = {
"Items": [{
id: 1,
name: 'MI'
}, {
id: 2,
name: 'MO'
}, {
id: 3,
name: 'AB'
}]
};
$scope.checkValue = function() {
if (acceptedValuesList.Items.find((item) => item.text == $scope.value)) {
console.log("accepted value");
} else {
// SANITIZE VALUE UNTIL IT'S CORRECT
}
}
});
当我在输入中写入我的数组中的一个字符串('MI','MO'或'AB')并单击按钮时,它会在我的列表中搜索字符串以及是否值在输入匹配三个字符串之一,我在我的控制台中打印一条消息。这很好用。所以我知道如果还有另一封信,我想在输入中清理我的价值。例如,当我将“ABx”输入到输入并按下按钮时,它应该删除“x”并在输入中显示“AB”。我怎样才能做到这一点?我没找到任何东西,这可以帮助我。我希望这很清楚。感谢。
编辑:我自己的解决方案:
这是我的解决方案:我在输入字段中写入一个值:输入值= xy Ab s;
首先,我使用toUpperCase()
来忽略区分大小写。
比我使用find()
遍历我的列表并在当前循环项目中搜索我的值。
$scope.value.toUpperCase(); // $scope.value = 'XYABS'
let item = $scope.acceptedValuesList.Items.find((item: any) => $scope.value.search(item.name) >= 0); // item = object in the list with id = 3 and name = 'AB'
之后,我检查是否找到了一个项目,因此输入中的值在我列表中的一个项目中。比我使用substr()
从名称长度开始的位置获取值中的子字符串。之后我得到了我的字符串。如果找不到任何项目,那么我的字符串错误,我清除输入:
if(item) {
$scope.value = $scope.value.substr($scope.value.search(item.name), item.name.length); // $scope.value = 'AB'
} else {
$scope.value = '';
}
这对我来说很好,我希望它足够清楚。谢谢。 :)
答案 0 :(得分:1)
您可以使用watch并比较值
$scope.$watch('value', function(newVal, oldVal) {
var newText;
if(newVal.indexOf("MI") > 0) {
newText = "MI";
} else if(newVal.indexOf("MO") > 0) {
newText = "MO";
} else if(newVal.indexOf("AB") > 0) {
newText = "AB";
}
$scope.value = newText;
});