AngularJs从html向作用域分配http响应对象
这是我第一次使用AngularJs,我非常感谢在这方面的帮助 我有一个json文件,从中检索html模板上显示的一些内容。到目前为止还不错 我需要从html中将http响应数据分配给作用域 这是我的应用程序AngularJs从html向作用域分配http响应对象,html,json,angularjs,http,angularjs-ng-init,Html,Json,Angularjs,Http,Angularjs Ng Init,这是我第一次使用AngularJs,我非常感谢在这方面的帮助 我有一个json文件,从中检索html模板上显示的一些内容。到目前为止还不错 我需要从html中将http响应数据分配给作用域 这是我的应用程序 var myApp = angular.module('myApp', ['ngMessages']); myApp.controller('mainController', ['$scope', '$filter', '$http', '$log', function($scope, $
var myApp = angular.module('myApp', ['ngMessages']);
myApp.controller('mainController', ['$scope', '$filter', '$http', '$log', function($scope, $filter, $http, $log) {
$scope.url = "myurl";
$http.get($scope.url)
.success(function(result) {
$scope.page = result;
})
.error(function(data, status) {
$log.info(data);
});
$scope.$watch('productId', function () {
$log.info($scope.productId);
});
}]);
这是html
<div class="page" ng-controller="mainController">
<div id="content" class="chapter">
<h1>The Icons Update</h1>
<div ng-init="productId = page[0].acf.spotlight_on"></div>
<p>{{ page[0].acf.spotlight_on_title }}</p>
<p>{{ page[0].acf.spotlight_on_paragraph }}</p>
<img src="{{ page[0].acf.stylist_picture }}" />
</div>
</div>
图标会更新
{{page[0].acf.spotlight\u on\u title}
{{page[0].acf.spotlight\u on\u段落}
我需要将页面[0].acf.spotlight\u的值分配给productId
,但需要从html进行分配。我只是得到一个未定义的值
我在div上使用nginit是正确的还是应该使用不同的方法?是否有其他方法来实现我所需的功能?如果使用ng init
,则它将创建一个范围变量,该变量仅限于定义它的元素(及其子元素)。换句话说,它在您的控制器中不可用,这就是为什么您得到“未定义”的原因
要解决此问题,可以使用$parent
,这将在控制器中创建范围变量:
ng-init="$parent.productId = page[0].acf.spotlight_on"
我的理解是,ng init
不能用于在解析承诺后设置范围值,这是从$http.get
设置值时发生的情况。有关ngInit,请参见角度文档
在你的问题中,你说你需要在html中设置productId
的值,但是如果承诺返回,这似乎是不可能的
另一种方法非常简单,只需使用以下命令即可在控制器中执行:
var myApp = angular.module('myApp', ['ngMessages']);
myApp.controller('mainController',
['$scope', '$filter', '$http', '$log',
function($scope, $filter, $http, $log) {
$scope.page = {};
$scope.productId = '';
$scope.url = "myurl";
$http.get($scope.url)
.success(function(result) {
$scope.page = result;
// set the value of productId from the result
$scope.productId = result[0].acf.spotlight_on;
})
.error(function(data, status) {
$log.info(data);
});
}]);
非常感谢您抽出时间回复。我刚刚添加了$parent
但是$scope.$watch('productId',function(){$log.info($scope.productId);})
仍然在控制台中为我提供未定义的
。我做错了什么吗?将您的手表更改为$scope.$watch('productId',function(new_val,old_val){console.log(new_val)})。查看值是否更新?它仍然未定义。我已仔细检查了该页[0]。acf.spotlight\u on不为空或无效。如果在html中执行{{page[0].acf.spotlight\u on}},则会显示该值。这是非常令人沮丧的。感谢您的帮助,请告诉我您是否有任何其他想法即使使用$parent
我也看不出在$http.get
返回后触发摘要循环以更新值的原因,因为没有ng模型
。IeproductId
设置为'undefined on'
init,因为$http.get
未返回,但未通过摘要循环更新。感谢您在@Tristan上的输入。你建议我应该怎么做?谢谢你,特里斯坦,我知道我能做到,但我正在从html模板中寻找解决方案。我明白这是不可能的,所以我会按照你的建议去做。再次感谢:)