Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJs从html向作用域分配http响应对象_Html_Json_Angularjs_Http_Angularjs Ng Init - Fatal编程技术网

AngularJs从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, $

这是我第一次使用AngularJs,我非常感谢在这方面的帮助

我有一个json文件,从中检索html模板上显示的一些内容。到目前为止还不错

我需要从html中将http响应数据分配给作用域

这是我的应用程序

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模型
。Ie
productId
设置为
'undefined on'
init,因为
$http.get
未返回,但未通过摘要循环更新。感谢您在@Tristan上的输入。你建议我应该怎么做?谢谢你,特里斯坦,我知道我能做到,但我正在从html模板中寻找解决方案。我明白这是不可能的,所以我会按照你的建议去做。再次感谢:)