在视图中更新AngularJS范围变量

时间:2014-04-14 19:15:33

标签: angularjs angularjs-directive angularjs-scope

我有以下AngularJS控制器函数,该函数向Web服务发出JSONP请求,将数据作为JSON文件获取,并将值分配给我通过AngularJS指令(如{{variableName}})在UI中显示的范围变量。当我在页面加载时运行它时,此函数正常工作,但是当我将其称为函数时,它不会更新视图值:

$scope.getData = function(id) {
    $http.jsonp( webServices.getData+'?callback=JSON_CALLBACK', config ).then( function ( response ) {
        $scope.data = response.data;
        if($scope.data.status == "ok") {

        $scope.data.receivedData = campaign.receivedData;

        }
    })
}

当JSONP调用返回值时,有人可以给我一个关于如何动态更新视图(表单输入控件)中的值的提示吗?我读了$ apply(),但不知道在哪里以及如何使用它。

感谢。

3 个答案:

答案 0 :(得分:0)

抓我早先的东西......

在你当时的承诺处理程序中,你有:

$scope.data.receivedData = campaign.receivedData;

但是您还没有定义什么广告系列,我假设您要在$ scope(您将要查看的内容将绑定到的内容)上设置与数据中的campaign相关的内容从致电webServices.getData回来。

答案 1 :(得分:0)

不绑定到函数...绑定到值。 并且:return promise

$scope.getData = function(id) {
    // return the promise....
    return $http.jsonp( webServices.getData+'?callback=JSON_CALLBACK', config ).then( function ( response ) {
        $scope.data = response.data;
        if($scope.data.status == "ok") {

        $scope.data.receivedData = campaign.receivedData;

        }
    })
}

// fetch that data into a variable, that you bind to.
$scope.myActualData = $scope.getData();

如果你以后想再次调用getData,不要只是调用它,再次将它再次绑定到绑定变量。

$scope.myActualData = $scope.getData();

答案 2 :(得分:0)

以下解决方案是否有帮助?

$http.jsonp( webServices.getData+'?callback=JSON_CALLBACK', config ).then( function ( response ) {
    $scope.data = response.data;
    if($scope.data.status == "ok") {
        $scope.data.receivedData = campaign.receivedData;
        $scope.$apply();
    }
})