【发布时间】:2013-12-23 04:09:01
【问题描述】:
我正在构建一个简单的 AngularJS 应用程序,但我无法解决有关服务、ng-repeat 和动态添加数据的问题。
我要做什么
我的页面被分成几个计数器。
在homeController 我有一个文本字段和一个按钮。当我按下按钮时,我正在对服务器进行 API 调用,服务器返回 JSON,我将数据设置为 Storage 服务。在这一部分中,一切正常 - 服务器按应有的方式返回数据,并将数据设置为服务,我在存储服务中得到 console.log('Data set!');。在第二个控制器(slidesController)我有一个ng-repeat
<div ng-controller="slidesCtrl">
<div ng-repeat="current in paragraphs"> test </div>
</div>
正如您在下面的代码中看到的那样,paragraphs 绑定到slidesCtrl 中的Storage.data 值
因此,当用户在框中输入内容并按下按钮 (homeCtrl) 时,服务器应将返回的数据传递给 Storage 服务并使用 ng-repeat (slideCtrl) 呈现数据。例如,如果我使用 [2, 3, 4, 5] 对存储服务器中的数据进行硬编码,则一切正常(由于 ng-repeat,我进行了 4 次测试),但如果数据是通过 api 调用获取的, ng-repeat 不起作用。
代码
App.controller('homeCtrl', function ($scope, $http, Api) {...
$scope.onprocess = function () {
$scope.loading = true;
Api(.....);
}
});
App.controller('slidesCtrl', function ($scope, Storage) {
$scope.paragraphs = Storage.data.paragraphs; // NOT WORKING IF DATA IS DYNAMICALLY ADDED
$scope.paragraphs = Storage.test; // IF DATA IS PREDEFINED EVERYTHING IS FINE
});
App.factory('Api', function ($http, Storage) {
return function (data) {
$http.post('/api', {
url: data.url,
analyze: 0
}).success(function (res) {....
Storage.set(res);....
}).error(function () {....
});
};
});
App.factory('Storage', function () {
var output = {};
var set = function (data) {
output = data;
console.log('Data set!');
};
return {
set: set,
data: output,
test: [1, 2, 3]
};
});
【问题讨论】:
-
请提供一个小提琴或一个 plunk...
-
这已经解决了。直到明天我才能标记答案。 @Abilash
标签: javascript api angularjs angularjs-scope angularjs-ng-repeat