如何在angularjs中的两个控制器之间共享数据

时间:2015-05-25 08:32:48

标签: angularjs

我试图将$ http返回的数据共享给另一个控制器。

 $scope.getClickData=function(dataId){
            var postData={"containerInstanceId" : "3842a251-1708-4df0-b941-db27a03d91ab","fetchMetadata":true,"parameters":{"#{organizationTypeID}":"abf1c91f-fea8-4033-a731-136c339525c7"}};

            $http.post('http://latest.tapplent.info/api/app/layouts/v1/container-instance/data',postData).
                success(function(data, status, headers, config) {
                $scope.data=data;
console.log(data.containerData[0].propertyData.NULL[0].organizationTypeName.value);

                }).
                error(function(data, status, headers, config) {
                    console.log("error");
                });

        }
    });

app.controller('webView', ['$scope', function($scope) {

            console.log($scope.data);

    }]),

如何将数据传输到webview控制器。请帮助我的朋友我该如何解决这个问题。

提前致谢。

3 个答案:

答案 0 :(得分:3)

以三种方式。

1。)您可以使用Angular工厂/服务。

myApp.factory('unicornLauncher', ["apiToken", function(apiToken) {
  return new UnicornLauncher(apiToken);
}]);

https://docs.angularjs.org/guide/providers

2。)使用广播和发射。

您可以通过$broadcast$Emit分享数据,然后通过$on在任何控制器中捕获这些数据。

https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope

由于性能原因,我更喜欢Angular工厂/服务而不是广播/发射。

3.)或者您可以使用$ rootscope。但这是最不受欢迎的,因为根镜是您的全球范围。你不应该浪费你的全球范围。

答案 1 :(得分:1)

最简单的方法是将数据写入rootScope。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{

    // Remove the row from data model
    [listOfAllOpenChats removeObjectAtIndex:indexPath.row];

    [tableView reloadData];
}

更好的方法是使用方法将$ http调用包装在一个服务中,以执行调用并检索数据并将其注入到两个控制器中。

答案 2 :(得分:1)

我通常喜欢Angularjs Wire up a Backend 2nd last Example

的其他方式

<强> controller1.js

来自 controller1 只需将 dataId 传递给 controller2 controller2 将包含将带来数据和填充的请求代码在范围内。

$scope.onButtonClick = function () {
     $location.url('/controller2?dataId='+33);
    //$scope.getClickData=function(dataId){}); add this func to controller2.js
}
  

controller1.js中的此代码将

     
      
  • 将小dataId传递给其他controller2.js

  •   
  • 还可以导航到其他controller2.js

  •   

<强> controller2.js

app.controller('controller2', function($scope, $location)
{
    var ID = $location.search();
    $scope.getClickData=function(ID.dataId){
         //REQUEST YOUR DATA
    });
});
  

注意:我们删除(request / angular promise)getClickData()函数   来自controller1.js并将其添加到controller2.js。这样做   controller2将负责自己的数据控制器2不必   取决于controller1的数据