2016-05-22 11 views
1

Ich habe eine Ansicht mit einer ng-include-Direktive. Der Wert ist an ein Modell gebunden.AngularJS wie man eine Zusage von einer ng-include-Direktive zurückgibt

Das Modell kann außerhalb des Controllers mit plain javascript geändert werden.

var promise = angular.element(controller).controller().navigateTo("controller/view"); 

Dann in meinem Controller habe ich das Modell eingestellt.

vm.goTo = function (url) { 
     $scope.$apply(function() { 
      vm.guestUrl = $sce.trustAsResourceUrl(url); 
     });    
    }; 

I can use the includeContentRequested event, but how do I return the promise ? 

    $scope.$on('includeContentRequested', function (e) { 

    }); 

Jetzt bin ich nicht mit ng-schließen ein, aber die $ HTTP-Anforderung zu tun und die mich $ kompilieren, so kann ich ein Versprechen zurück.

vm.navigateTo = function (url) {   

    var deferred = $q.defer(); 

    var promise = $http({ 
     method: 'GET', 
     url: url 
    }); 

    promise.then(function successCallback(response) { 
     var container = $('#mainContainer'); 
     container.empty(); 

     var html = response.data; 

     container.append(html); 

     $compile(container)($scope); 

     deferred.resolve('ok'); 

    }, function errorCallback(reason) { 
     deferred.reject(reason); 
    }); 
    return deferred.promise; 
}; 

Ich denke, es sauberer ist ein ng-Include-Direktive zu verwenden.

Kann jemand eine Zusage im IncludeContentRequested-Ereignis zurückgeben?

Ich komme mit diesem Code, um möglich zu sein, den Host zu benachrichtigen, aber es ist hässlich. Also ich denke ich ruhe mich mit meinem $ http Anruf aus.

vm.goTo = function() { 
    var deferred = $q.defer(); 

    $scope.$apply(function() { 
     vm.guestUrl = $sce.trustAsResourceUrl('http://localhost:63661/'); 
    }); 

    $scope.$on('$includeContentLoaded', function (args) { 
     deferred.resolve('ok'); 
     $scope.$destroy('$includeContentLoaded'); 
    }); 

    return deferred.promise; 
}; 
+0

Sicher scheint wie ein langer Weg, um ohne Ihre eigene einfache Richtlinie zu schaffen, um jQuery – charlietfl

+0

zu verwenden @charlietfl dies, weil ist Es heißt von einem anderen Projekt, das AngularJS nicht enthalten hat –

+0

Aber wenn Sie die eckige App eingeben, können Sie einfach ein eckiges Ereignis verwenden, um eine Anweisung zu aktualisieren – charlietfl

Antwort

1

anstelle von ng-include - Ich würde vorschlagen, ein directive verwendet, die einen eigenen Controller und Umfang hat.
dieser Bereich ist ein großer Platz, ein Versprechen zu setzen

(was eine Abstraktion auf einem variablen gebaut ist)
+0

Dies wäre in der Tat eine Idee. Ich werde diesen Vorschlag versuchen. Danke –