gpt4 book ai didi

javascript - 工厂方法中的数据更改后 AngularJS 范围不更新

转载 作者:行者123 更新时间:2023-11-30 17:41:37 26 4
gpt4 key购买 nike

我觉得我在这里遗漏了一些明显的东西,但我仍然受阻。

我通过调用 ThingFactory 上的创建函数来更新作用域上的 Thing。但是当我从 PromoteController 引用作用域时,该作用域仍然包含旧版本的 Thing(ID 为 1)。

这似乎是我想使用 $scope.$apply() 的地方,但这会导致“摘要已经在进行中”错误。

我错过了什么?

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

app.factory('ThingFactory', ['$http', '$q', '$routeParams', function ($http, $q, $routeParams) {

var deferred = $q.defer();

return {
get: function(id) {

var thing = {
id: 393,
name: 'Can I be gotten?',
description: 'get'
};
deferred.resolve(thing);
return deferred.promise;
},
save: function (thing) {
console.log("ThingFactory -> CREATE");
var thing = {
id: 122,
name: 'after create.',
description: 'creatine'
};
deferred.resolve(thing);

return deferred.promise;
},
init: function() {
console.log("ThingFactory -> INIT");
var thing = {
id: 1,
name: 'initial value',
description: 'INIT'
};
deferred.resolve(thing);
return deferred.promise;
}
};

}]);

app.config(function ($routeProvider, $locationProvider, $httpProvider) {
$locationProvider.html5Mode(true);
$routeProvider
.when('/build', {
templateUrl: '/build.html',
controller: 'BuildController'
})
.when('/things/:id/promote', {
templateUrl: '/promote.html',
controller: 'PromoteController'
})
});


app.controller('BuildController', function ($scope, $http, $location, ThingFactory) {
// HERE I INITIALIZE THE THING
ThingFactory.init().then(function(thing) {
$scope.thing = thing;
});

$scope.saveNewThing = function() {
// HERE I 'SAVE' THE THING
ThingFactory.save($scope.thing).then(function(thing) {
$scope.thing = thing;
$location.path("/" + thing.id + "/promote");
})
}

});

app.controller('PromoteController', function ($scope, $http, $routeParams, ThingFactory) {
// HERE'S WHERE THE THING ON THE SCOPE SHOULD HAVE AN ID OF 122,
// BUT IS STILL 1
var id = $routeParams.id;
ThingFactory.get({id: id}).then(function(thing) {
$scope.thing = thing;
});
});

最佳答案

请创建一个 var deferred = $q.defer();对于您工厂中的每种方法。否则你总是使用相同的 deferred 并且这是用你的 init 函数中的值解决的。

关于javascript - 工厂方法中的数据更改后 AngularJS 范围不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20958599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com