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();