我有一个对象words
和一个复选框,它应该隐藏这个对象的特定元素,但我无法让它工作。
<body ng-controller="ArrController">
<input type="checkbox" ng-model="hide"> {{kc}}
{{words}}
</body>
ArrController
:
app.controller('ArrController', function ($scope, $http) {
$scope.hide = false;
$http.get('array.json').success(function(data) {
var keyword = 'lol';
$scope.words = data.unsorted_arr;
$scope.$watch('hide', function () {
if ($scope.hide == true) {
var remove = function() {
$scope.words.splice(keyword, 1);
}
$scope.kc = 'hidden';
} else {
$scope.kc = 'not hidden';
$scope.words = data.unsorted_arr;
}
});
});
});
文件array.json
包含words
的数据:
{"unsorted_arr":{"gonna":3,"lol":114,"wouldn":2,"know":6,"lowkey":2,"man":5}}
kc
根据复选框状态进行修改,但words
保持不变。
我哪里错了?
答案 0 :(得分:1)
Splice用于删除数组中的某些内容,它将两个整数作为参数。
由于你有一个对象,只需使用delete:
delete $scope.words[keyword];
通过这样做,$ scope.words = data.unsorted_arr,这两个变量引用同一个对象,所以从$ scope.words中删除一些内容会将其从data.unsorted_arr中删除。
保留对它的引用,以便您以后可以重新填充它:
var word = $scope.words[keyword];
...
delete $scope.words[keyword];
...
$scope.words[keyword] = word;
答案 1 :(得分:1)
在您的示例中,您定义了一个用于删除元素的函数,但该函数永远不会被调用。
var remove = function() {
$scope.words.splice(keyword, 1);
}
您可能需要使用逻辑删除该功能(因为它似乎不需要)并将splice
替换为delete
语句:
$http.get('array.json').success(function(data) {
var keyword = 'lol';
$scope.words = data.unsorted_arr;
$scope.$watch('hide', function () {
if ($scope.hide == true) {
delete $scope.words[keyword];
$scope.kc = 'hidden';
} else {
$scope.kc = 'not hidden';
$scope.words = data.unsorted_arr;
}
});
});
答案 2 :(得分:1)
您将索引数组与关联数组混淆,
Array.splice是Indexed Arrays的方法, 你有一个简单的Javascript Object (associative array) ...
在POJO上你可以使用删除运算符或简单地重新分配到undefined:
var a = { foo: 'baz' };
delete a['foo'];
var b = ['foo', 'baz'];
b.splice(0, 1)
&#13;