لا يتم تحديث ngOptions ككائنات مضافة إلى المصفوفة
-
21-12-2019 - |
سؤال
لدي مصفوفة تحتوي على كائنات.عندما أقوم بدفع كائن جديد إلى هذه القائمة، لا يتم تحديث العرض لإضافة الكائن الجديد.أفترض أن الأمر يتعلق بـ $scope.$apply ولكني لست متأكدًا من كيفية استخدامه.لقد حاولت تغليف وظيفة الدفع حول هذا ولكن المصنع يقول إن $scope غير محدد.
منظر:
<label for="groupOwner">List Template:
<select
id="listTemplate"
ng-model="newList.template"
ng-options="t.name for t in listTemplates|orderBy: 'name'"
></select>
</label>
كنترول:
$scope.createList = function (){
var modalForm = '/Style%20Library/projects/spDash/app/partials/newList.html';
var modalInstance = $modal.open({
templateUrl: modalForm,
backdrop: true,
windowClass: 'modal',
controller: 'newListCtrl',
resolve: {
newListData: function (){
return $scope.newList;
}
}
});
modalInstance.result.then(function(newList){
SiteService.createList(newList,$scope.site);
});
};
وظيفة الخدمة:
var createList = function (newList, site){
var promise = $().SPServices({
operation: "AddList",
webURL: site.url,
listName: newList.name,
description: newList.description,
templateID: newList.template.id
})
promise.then(function (){
addToQuickLaunch(newList.name,site.url)
getSiteInfo(site);
//take new list object and push to siteLists array
siteLists.push(newList);
},function (reason){
console.log('Failed: ' + reason);
})
}
function addToQuickLaunch (name,siteUrl) {
$().SPServices({
operation: "UpdateList",
webURL: siteUrl,
listName: name,
listProperties: "<List OnQuickLaunch='TRUE' EnableVersioning='TRUE'/>",
completefunc: function(xData,Status){
console.log(name + " list created")
}
});
}
المحلول
يلقي هذا الرمز إشارة فورية لي:
modalInstance.result.then(function(newList){
SiteService.createList(newList,$scope.site);
});
لا يجب عليك تمرير المصفوفة من وحدة التحكم عبر الخدمة بهذه الطريقة.بدلاً من ذلك، قم بما يلي:
modalInstance.result.then(function(newList){
return SiteService.createList(newList);
}).then(function(list) {
$scope.site.lists.push(list);
});
في هذه الحالة، سيكون لديك createList
إرجاع وعد، وحل هذا الوعد بالكائن الذي سيتم إضافته إليه $scope.site.lists
.ومع ذلك، يجب أن تلاحظ أنه لا ينبغي أن يكون لديك هذا القدر من المنطق في وحدة التحكم الخاصة بك.قم بتلخيص ذلك بشكل أكبر من خلال وجود طريقة واحدة تُرجع وعدًا وتخفي هذه التفاصيل.يجب أن تحتوي وحدة التحكم الخاصة بك ببساطة على:
someService.someMethod().then(function(result) {
$scope.whatever.push(result);
});