2015-04-28 22 views
0

我试图让一段代码工作在我没有完全控制一半代码的地方。总之,有一个主控制器具有从第二个控制器获得的对象。当主控制器1更新对象时,控制器2从不会看到它。我认为这是因为2个控制器没有看对象/属性(副本)。如果您注意到,{{Title}}的角度绑定,这是问题的可见性,因为“标题”永远不会在第二个控制器中更新。

以下是显示问题的一些示例代码。目前,代码执行一个3秒循环来重新获取对象,并将其重新分配给第二个控制器。

这里的代码我无法真正触及。我有源,但意大利面和我只是泛泛而谈。

// html I can't really change, outside my world. 
<div id="mainApp" ng-app="MainApp" ng-controller="mainController"> 
</div> 

// code I can't "really" change, non-angular (can't use $http). 
$ajax(get...) 
.success(function (result) { 
    $('#element').html(result); 
}) 

下面的代码是相当分离的,我可以修补它。 HTML是从上面$ ajax调用的服务中返回的。

// code I can change (the "result", or html returned from the service) 
// containerController.js 
var containerController = function ($scope, $timeout) { 
    $scope.models = { 
     item: null; 
    } 

    $scope.getItem = function() { 
     var mainAppScope = angular.element($('#mainApp')).scope(); 
     $scope.models.item = mainAppScope.GetItem(); 
    } 

    $scope.getItem(); 

    // HACK WORK AROUND 
    // Get the item from the mainController. 
    var itemSync = setInterval(function() { 
    $scope.getItem(); 
     $scope.$apply(); 
    }, 3000); 
} 

的HTML从服务返回(这真是一个ASP.NET MVC部分图)

// HTML 
<div id="container" ng-app="containerApp" ng-controller="containerController"> 
    <!-- This will bind the first time, but won't syncronize when other controller updates --> 
    <!-- the controller is currently doing a loop to do so, not good. --> 
    <div>{{models.item.Title}}</div> 
</div> 

<script type="text/javascript" src="~/Scripts/controllers/containerController.js"></script> 
<script type="text/javascript"> 
    // This will inject the controller and new app into angular. 
    var container = document.getElementById('container'); 

    var containerApp = angular.module('containerApp', []); 

    containerApp.controller('containerController', ['$scope', containerController]); 

    angular.bootstrap(angular.element(container), ['containerApp']); 
</script> 

回答

0

你可以改变哈克部分使用$interval将管理运行每个间隔

后消化周期
var itemSync = $interval(function() { 
    $scope.getItem(); 
}, 3000); 

要将对象从父控制器同步到子控制器,您可以使用模型的对象结构,那只不过是Javascript prototypal &将更新数据。

$scope.pageData = {}; //declare this in parent controller 
$scope.pageData.title = 'Title 1' //use this where you want to change in child controller 
相关问题