سؤال

لدي مصفوفة تحتوي على كائنات.عندما أقوم بدفع كائن جديد إلى هذه القائمة، لا يتم تحديث العرض لإضافة الكائن الجديد.أفترض أن الأمر يتعلق بـ $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);
});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top