更新视图中的AngularJS范围变量

更新视图中的AngularJS范围变量,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我有以下AngularJS控制器函数,它向Web服务发出JSONP请求,以JSON文件的形式获取数据,并将值分配给我通过AngularJS指令(如{variableName})在UI中显示的范围变量。当我在页面加载时运行此函数时,它工作正常,但是当我将其作为函数调用时,它不会更新视图值: $scope.getData = function(id) { $http.jsonp( webServices.getData+'?callback=JSON_CALLBACK', config ).

我有以下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的文章,但不知道在哪里以及如何使用它


谢谢。

把我之前吃的东西擦掉

在您的承诺处理程序中,您有:

$scope.data.receivedData = campaign.receivedData;

但是您还没有定义什么是活动,我假设您希望在$scope上设置与您的视图绑定到的活动相关的内容,该活动位于调用webServices.getData返回的数据中。

不要绑定到函数。。。绑定到一个值。 还有:回报承诺

如果以后要再次调用getData,不要只是调用它,而是将它再次赋给绑定变量

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

以下解决方案有用吗

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

当我这样做的时候,我得到了这个错误:查看更新的代码,并将所有逻辑放在范围内。应用,这样你只需强制摘要循环运行一次。谢谢,但结果是一样的-错误你是否调查过将此调用放入角度服务/工厂,然后从调用返回对服务的承诺?这样,控制器内部就不会有任何非角度代码导致与摘要周期冲突。谢谢,布罗科。有没有示例代码?我不确定我得到了你所指的。把它看作是一个简单的文本输入。
$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();
    }
})