在angularJs中以页面加载的角度访问输入字段值

时间:2015-03-18 06:15:12

标签: ajax angularjs asynchronous

一旦我的页面根据预先填充的隐藏字段的内容加载完成加载,我一直在尝试让我的角度应用程序发出ajax请求。然而,到目前为止,我的尝试一直是徒劳的,因为到目前为止我在页面加载上运行方法时看到的大多数方法都不必等待字段填充。在以下示例代码中,if(!isNaN(id))始终失败,因为无论我如何运行该方法,$scope.item_id在调用方法时仍然为空,这意味着parseInt()会返回undefined

<input type="hidden" ng-model="item_id" value="1">
<input ng-model="item_data">

$scope.loadItem = function(){
  var id = parseInt($scope.item_id)
  if(!isNaN(id)){
    $http.get('/items/get/' + id).success(function(data) {
      $scope.item_data = data;
    });
  }
}

如何在字段初始化之后运行这个方法,或者是否有办法初始化它们以便angular在发送ajax请求之前能够看到它们?

对于那些想知道的人,我这样做是因为我需要我的脚本是静态的,我只能在页面上生成html代码,但我正在加载一个json数组,该脚本将由脚本进行处理以显示对象列表,这意味着我需要通过json获取它。可能有一种更简单的方法可以做到这一点,但到目前为止我还没想过。

编辑:有人提出问题#14968690可能会更糟糕,但我的问题并不是因为我无法在加载角度时发出ajax请求,但我可以

确保我通过隐藏输入字段传递给我的视图的数据已经可用。

EDIT2(解决方案):为了让一些建议的解决方案起作用,我尝试将我的控制器脚本放在我的身体末端而不是在开头并直接声明我的变量范围而不是在js运行时可能会或可能不会初始化的字段(并且如果我想将其放在表单中,则将该字段上的ng-model与该变量绑定),如下所示:

<script>menu_id=1</script>
<script src="/static/scripts/app.js"></script>

<input type="hidden" name="menuId" ng-model="menu_id">

虽然这并不能解决我刚才提出的确切问题,但它确实解决了让我提出这个问题的问题。

1 个答案:

答案 0 :(得分:0)

使用ng-value来提供隐藏变量

的绑定
<input type="hidden" name="item_id" ng-model="item_id" ng-value="item_id=1" />

或者您可以使用双向绑定创建字段,然后我将其隐藏起来。

<div ng-init="item_id=1">
   <input type="text" name="item_id" ng-model="item_id" style="display: none;"/>
<.div>