Javascript 从控制器上的负载角度初始化所有ng模型
我陷入了一个问题,我想在用户开始输入之前,获取所有声明为Javascript 从控制器上的负载角度初始化所有ng模型,javascript,angularjs,json,angularjs-scope,angular-ngmodel,Javascript,Angularjs,Json,Angularjs Scope,Angular Ngmodel,我陷入了一个问题,我想在用户开始输入之前,获取所有声明为ng model=“a['keyX']的ng模型,并将其初始化为0 由于某些原因,我无法使用ng值 我试图将$scope.a放入我的initializeToZero()函数中。它返回一个空的json对象 我甚至试过使用$scope.$apply(),但我的运气不好 我得到的只是一个空的json对象 是否有任何方法可以在控制器中初始化它们,而不考虑输入和键的数量 密钥的名称会完全不同…我只是在这里提供了通用密钥名称…所以请确保您没有硬编码它
ng model=“a['keyX']
的ng模型,并将其初始化为0
由于某些原因,我无法使用ng值
我试图将$scope.a
放入我的initializeToZero()
函数中。它返回一个空的json对象
我甚至试过使用$scope.$apply()
,但我的运气不好
我得到的只是一个空的json对象
是否有任何方法可以在控制器中初始化它们,而不考虑输入和键的数量
密钥的名称会完全不同…我只是在这里提供了通用密钥名称…所以请确保您没有硬编码它
我在代码段中提到了ng controller
,但我使用的是ui.router
angular.module('myApp',[])
.controller('myCtrl',函数($scope){
初始化为零();
函数初始化为零(){
如果(!$scope.$$phase){
$scope.$apply();
console.log($scope.a);
}否则{
设置超时(初始化为零,1000);
}
}
});
首先,最好使用.key1而不是['key1']。其次,如果要为所有a值指定零,请使用控制器开头的map函数: $scope.a.map(函数(项){return'0';})
这将返回一个所有项都设置为零的值。您应该首先定义函数
initializeToZero
js:
angular.module('myApp',[])
.controller('myCtrl',函数($scope,$parse){
$scope.a={};
$scope.initializeToZero=函数(){
var temp=“key”;
对于(变量i=0;i<8;i++){
var计数=i+1;
var模型=温度+计数;
var结果=$parse(模型);
结果分配($scope.a,0);
console.log($scope.a);
}
}
$scope.initializeToZero();
});
html:
编辑:有点老套,但我想它会完成工作的 HTML:
JS:
angular.module('myApp',[])
.controller('myCtrl',函数($scope){
var inputs=document.getElementsByTagName('input');
$scope.a={};
对于(var i=0;i,您需要确保在显示输入字段之前加载了数据:
HTML:
<div ng-app="myApp" ng-controller="myCtrl" data-ng-init="getValues()">
<div ng-show="dataLoaded">
<input type="number" ng-model="a['key1']">
<input type="number" ng-model="a['key2']">
<input type="number" ng-model="a['key3']">
<input type="number" ng-model="a['key4']">
<input type="number" ng-model="a['key5']">
<input type="number" ng-model="a['key6']">
<input type="number" ng-model="a['key7']">
<input type="number" ng-model="a['key8']">
</div>
</div>
IN YOUR CONTROLLER:
$scope.getValues= function () {
// Do your initialization here
// For example:
angular.forEach($scope.a, function(key, value){
$scope.a[key] = 0;
})
// Set dataLoaded to true
$scope.dataLoaded = true;
}
HTML:
在控制器中:
$scope.getValues=函数(){
//在这里进行初始化
//例如:
angular.forEach($scope.a,函数(键,值){
$scope.a[key]=0;
})
//将dataLoaded设置为true
$scope.dataLoaded=true;
}
CODEPEN:终于破解了它…必须进行一些肮脏的编码…但是没关系..这是代码
function application(){
$('input[ng-model^="a"]').each(function(){
$(this).val(0);
});
}
$scope.initializeToZero = function(){
console.log("Called initializeToZero");
if(!$scope.$$phase)
{
$scope.$apply(application);
console.log("Applied");
}
else{
console.log("REDOING");
setTimeout($scope.initializeToZero,1000);
}
}
$scope.initializeToZero();
您是否尝试在ng init中调用initializeToZero,并将“a={}”作为initializeToZero函数的第一行?或者在angular.element(文档)中调用initializeToZero.ready函数?是的,我试过了。。它也不起作用。@RicardoPontualIt对我不起作用。@RicardoPontualIt…但是你可以编辑并上传一段代码片段来解释你的观点。$scope.a应该是一个json对象,而不是数组。如果你只能控制所有的键,那就太好了。@Tirsrajbarot,对不起,我已经将它更新为json对象并分配了It值,请试一试!@Tirstrajbarot我再次更新了代码,请检查它。您硬编码为长度8。它应该是动态的您可以循环通过@Tirstrajbarot我认为获取输入的数量非常简单,并且不是您遇到的问题的核心,所以我没有为此烦恼。我编辑了我的回答。不…再次检查问题。我已经提到解决方案应该是键的数量可以是动态的,名称也可以是动态的…它不仅仅是一个从1到8的键数组…它是不同的@LawrenceWebDev@TirthrajBarot您是否可以控制
元素的生成方式?还是将它们作为e form
再次阅读问题..密钥的名称不是固定的..您已经硬编码了它…@gianni不够…输入将与ng模型一起卡在html上
<div ng-app="myApp" ng-controller="myCtrl">
<input type="number" ng-model="a['key1']">
<input type="number" ng-model="a['key2']">
<input type="number" ng-model="a['key3']">
<input type="number" ng-model="a['some']">
<input type="number" ng-model="a['other']">
<input type="number" ng-model="a['keys']">
</div>
angular.module('myApp', [])
.controller('myCtrl', function($scope) {
var inputs = document.getElementsByTagName('input');
$scope.a = {};
for (var i=0; i<inputs.length; i++) {
$scope.a[inputs[i].getAttribute('ng-model').replace(/^a\[\'(.*)\'\]$/, '$1')] = 0;
}
});
HTML:
<div ng-app="myApp" ng-controller="myCtrl" data-ng-init="getValues()">
<div ng-show="dataLoaded">
<input type="number" ng-model="a['key1']">
<input type="number" ng-model="a['key2']">
<input type="number" ng-model="a['key3']">
<input type="number" ng-model="a['key4']">
<input type="number" ng-model="a['key5']">
<input type="number" ng-model="a['key6']">
<input type="number" ng-model="a['key7']">
<input type="number" ng-model="a['key8']">
</div>
</div>
IN YOUR CONTROLLER:
$scope.getValues= function () {
// Do your initialization here
// For example:
angular.forEach($scope.a, function(key, value){
$scope.a[key] = 0;
})
// Set dataLoaded to true
$scope.dataLoaded = true;
}
function application(){
$('input[ng-model^="a"]').each(function(){
$(this).val(0);
});
}
$scope.initializeToZero = function(){
console.log("Called initializeToZero");
if(!$scope.$$phase)
{
$scope.$apply(application);
console.log("Applied");
}
else{
console.log("REDOING");
setTimeout($scope.initializeToZero,1000);
}
}
$scope.initializeToZero();