Question

J'ai un tableau qui contient des objets.Quand je pousse un nouvel objet de cette liste, le point de vue n'est pas à jour pour ajouter le nouvel objet.Je suppose qu'il a à faire avec le $scope.$appliquer mais je ne suis pas sûr de la façon de l'utiliser.J'ai essayé d'emballer la fonction "push" autour de cela, mais l'usine, dit - $champ d'application n'est pas défini.

Vue:

        <label for="groupOwner">List Template:
            <select 
                id="listTemplate"
                ng-model="newList.template"
                ng-options="t.name for t in listTemplates|orderBy: 'name'"
            ></select>
        </label>

Ctrl:

    $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);
        });
    };

Fonction de Service:

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")
      }
    });
}
Était-ce utile?

La solution

Ce code génère immédiatement un drapeau pour moi:

modalInstance.result.then(function(newList){
    SiteService.createList(newList,$scope.site);
});

Vous ne devriez pas passer le tableau à partir du contrôleur par le biais du service comme ça.Au lieu de cela, faire ceci:

modalInstance.result.then(function(newList){
    return SiteService.createList(newList);
}).then(function(list) {
  $scope.site.lists.push(list);
});

Dans ce cas, vous aurez createList de retour d'une promesse, et de résoudre cette promesse avec l'objet qui doit être ajouté à $scope.site.lists.Cependant, vous devez noter que vous ne devriez pas avoir ce bien la logique dans votre contrôleur.Résumé cette plus loin en ayant une seule et unique méthode qui retourne une promesse et masquer ces informations.Votre contrôleur devrait tout simplement:

someService.someMethod().then(function(result) {
  $scope.whatever.push(result);
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top