[英]Why $scope.variable in ChildController is not resolving to the $scope.variable in ParentController
[英]$scope.variable not changed after AJAX
我正在进行ajax调用以从服务器获取一些信息,然后更新屏幕上的列表。 信息回来了,但是范围没有更新! 我已经尝试过使用$ apply(),但只收到一个错误
代码如下:
在正确的控制器内,在HTML中:
<div ng-controller=controller_1>
<div ng-controller=controller_2>
<button ng-click="myfunction()">click</button>
</div>
</div>
在angular controller_1
,我们定义了$scope.vendorsarray
在角度controller_2
_2中,注入了$ scope,
$scope.function = function(){
Factory.ajaxfactoryAction($scope.itemsarray).success(function(data, status, headers, config) {
$scope.vendorsarray = data
// POINT A
}
// POINT B
}
现在,如果我在A点和B点在B点执行console.log($scope.vendorsarray)
(首先触发,因为它不必等待ajax),所以我得到了旧的vendorsarray
。 然后在A处,我得到新的正确的vendorsarray
。 但是那时vendorsarray
仍未在浏览器中更新! 这是怎么回事?
谢谢你的帮助。
编辑
这是我尝试实现$ apply()的方法:
$scope.function = function(){
Factory.ajaxfactoryAction($scope.itemsarray).success(function(data, status, headers, config) {
$scope.vendorsarray = data
var temp = $scope.vendorsarray
$scope.$apply(function() {
$scope.vendorsarray = temp;
});
}
}
这是错误(在控制台中):
https://docs.angularjs.org/error/ $ rootScope / inprog?p0 = $ digest
Error: error:inprog
Action Already In Progress
$digest already in progress
但是那时vendorarray仍未在浏览器中更新! 这是怎么回事?
这里的问题(用几句话来说)是每个控制器都有自己的$scope.vendorsarray
副本。
您可以使用服务在两个控制器之间共享数据模型。 Angular服务是Singletons。 依赖于服务的每个组件都获得对服务工厂生成的单个实例的引用。
以下示例显示了此解决方案的基本结构:
var app = angular.module('module', []) .factory('shared', function() { var shared = { "data": [], "counter": 0 }; return shared; }) .controller('Ctrl1', ['$scope', 'shared', function($scope, shared) { $scope.shared = shared; $scope.add = function() { $scope.shared.data.push("Item " + $scope.shared.counter++); } } ]) .controller('Ctrl2', ['$scope', 'shared', function($scope, shared) { $scope.shared = shared; } ]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="module"> <div ng-controller="Ctrl1"> CONTROLLER 1 <button ng-click="add()">ADD</button> </div> <div ng-controller="Ctrl2"> CONTROLLER 2 <ul> <li ng-repeat="item in shared.data">{{item}}</li> </ul> </div> </div>
有关:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.