請考慮以下angularjs代碼控制器:
(function (app) {
var controller = function ($scope, $state, datacontext) {
$scope.$parent.manageTitle = "Account Management";
$scope.accounts = [];
var init = function() {
getRecords();
};
var getRecords = function() {
return datacontext.getAccounts().then(function (data) {
$scope.$apply(function() {
$scope.accounts = data;
});
});
};
init();
};
app.controller("accountsCtrl", ["$scope", "$state", "datacontext", controller]);
})(angular.module("app"));
刪除$範圍$適用的包裝,並在getRecords方法打破了代碼,只留下「$ scope.accounts =數據」。數據被檢索,但html中的ng-repeat指令不會自動更新。我試圖甩掉整個$ apply/$ digest模型,但可以肯定的是,在這種情況下不應該要求$ apply。
我做錯了什麼?
謝謝。
< ------------------------------------------編輯 - -------------------------------------->
好的,謝謝你的回覆。這是datacontext。它使用Breeze。我仍然無法弄清楚問題所在 - - 我只是不明白爲什麼在上面的代碼中需要$ apply。
(function (app) {
var datacontext = function() {
'use strict';
breeze.config.initializeAdapterInstance('modelLibrary', 'backingStore', true);
breeze.config.initializeAdapterInstance("ajax", "angular", true);
breeze.NamingConvention.camelCase.setAsDefault();
var service;
var manager = new breeze.EntityManager('api/ProximityApi');
var entityQuery = breeze.EntityQuery;
var queryFailed = function (error) {
};
var querySuccess = function (data) {
return data.results;
};
var getAccounts = function() {
var orderBy = 'accountName';
return entityQuery.from('Accounts')
.select('id, accountName')
.orderBy(orderBy)
.using(manager)
.execute()
.then(querySuccess, queryFailed);
};
service = {
getAccounts: getAccounts
};
return service;
};
app.factory('datacontext', [datacontext]);
})(angular.module('app'));
再次感謝!
這一切都取決於什麼'getAccounts()'方法返回... – gkalpak
是DataContext的服務,並執行該服務使用的承諾? –
datacontext是一項服務,您可以在控制器初始化的數組表示法中看到它。 – ryeballar