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>