请考虑以下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