Angularjs 范围不为';t刷新
我的http.get有问题 Index.htmlAngularjs 范围不为';t刷新,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我的http.get有问题 Index.html <div ng-repeat="element in elements"> <p>{{element.elementText}}</p> </div> 当ng单击调用范围函数时,用另一个json替换一个更新$scope.elements: $scope.updateScope = function () { $http.get('someOtherUrl') .then(function (res
<div ng-repeat="element in elements">
<p>{{element.elementText}}</p>
</div>
当ng单击调用范围函数时,用另一个json替换一个更新$scope.elements:
$scope.updateScope = function () {
$http.get('someOtherUrl')
.then(function (response) {
$scope.elements = response.data;
});
但是当我调用updateScope时,什么都没有出现。我试着用它。成功了,但什么都没有。我尝试使用$scope.$apply在将响应分配给$scope.elements之后,但它生成了一个错误(错误:[$rootScope:inprog]$rootScope/inprog?p0=%24digest)
更新-
如果我重新加载页面ng,范围元素上的重复操作将正常工作。
所以$scope.elements包含正确的值,但ng repeat不会自行更新。
对不起,我的英语
您能帮我吗?您可以尝试以下代码。(您需要包括$timeout)
您可以尝试以下代码。(您需要包括$timeout)
.then(function(response){
和.success(function(response){
在它们的回调中获取不同的对象。在第一种情况下,您直接获取响应的数据,在第二种情况下,它将被包装在一个对象中(还有其他属性,如状态
、配置
、状态文本
,等等)
如果您使用。那么
您的响应主体将在sth.data
中,而不是在sth
中。因此,在您的情况下:
$scope.updateScope = function () {
$http.get('someOtherUrl').then(function (response) {
$scope.elements = response.data;
});
.then(function(response){
和.success(function(response){
在它们的回调中获取不同的对象。在第一种情况下,您直接获取响应的数据,在第二种情况下,它将被包装在一个对象中(还有其他属性,如状态
、配置
、状态文本
,等等)
如果您使用。那么
您的响应主体将在sth.data
中,而不是在sth
中。因此,在您的情况下:
$scope.updateScope = function () {
$http.get('someOtherUrl').then(function (response) {
$scope.elements = response.data;
});
你可以用
你可以用
共享要使用服务的数据,而不是根目录。请考虑这样的例子:
HTML这里是一个运行该代码的代码。
共享要使用服务的数据,而不是根目录。请考虑这样的例子: HTML这是一个运行该代码的程序。您验证了
响应的样子吗?它看起来像以前的响应吗?是否有响应?是的,Michael Perrenoud。它包含新值。您验证了它应该直接设置为响应吗?我的观点是,该摘要已经运行,因此不会出错唱更新。第二个响应可能有些不同。等等,我刚刚注意到你提到你有两个不同的控制器;你真的是指控制器还是指一个超出单个控制器范围的方法来更新数据?不,我有两个控制器,$scope.elements在.run(函数)中初始化($rootScope){$rootScope.elements='';});您是否验证了响应的外观?它是否与以前的响应一样?是否有响应?是的,Michael Perrenoud。它包含新值。您是否验证了它是否应直接设置为响应?我的观点是,摘要已在运行,因此不会错过更新。可能有一些关于第二个响应,我有不同的看法。等等,我刚刚注意到你提到了你有两个不同的控制器;你真的是指控制器,还是指脱离单个控制器范围更新数据的方法?不,我有两个控制器,$scope.elements在.run(函数($rootScope)中初始化{$rootscope.elements='';});是的,托梅克。对不起。我会编辑我的答案。但它仍然不起作用。是的,托梅克。对不起。我会编辑我的答案。但它仍然不起作用。不,这不是必需的。第二个回答有些不同。不,这不是必需的。第二个回答有些不同。谢谢Micheal。我理解。但我的问题是ng repeat不会用第二个控制器中设置的正确值更新自身。如果我重新加载页面,它会工作。谢谢Micheal。我理解它。但我的问题是ng repeat不会用第二个控制器中设置的正确值更新自身。如果我重新加载页面,它会工作。
$scope.updateScope = function () {
$http.get('someOtherUrl').then(function (response) {
$scope.elements = response.data;
});
angular.merge(object1, object2)
<div ng-app="app">
<div ng-controller="controller1 as vm">
<input type="text" ng-model="vm.dataService.data" />{{vm.dataService.data}}</div>
<div ng-controller="controller2 as vm">
<input type="text" ng-model="vm.dataService.data" />{{vm.dataService.data}}</div>
</div>
var app = angular.module('app', []);
app.factory('DataService', function () {
var data;
return {
data: 'Hello, World!'
};
});
app.controller('controller1', function (DataService) {
var vm = this;
vm.dataService = DataService;
});
app.controller('controller2', function (DataService) {
var vm = this;
vm.dataService = DataService;
});