2016-07-28 12 views
0

Ich setze und bekomme Werte mit angularjs factory, Dies sind Live-Nachrichten, die in mainCtrl kommen Ich möchte Daten nehmen, die derzeit in $scope.event ist, wenn Benutzer suchen Protokoll von searchLogs() Ich habe Daten in modalen Fenster gefüllt, das funktioniert, aber Problem ist Ich bekomme immer die Daten von mainCtrl Wie man die Bindung stoppt, sobald ich Daten im modalen Fenster an irgendeinem Punkt habe ich will nicht Daten erhalten, damit Benutzer Suche machen kann, die im $scope verfügbar ist?wie zu verwenden und mit angularjs factory?

factory.js

angular.module('App').factory('searchFactory', function ($http) { 
    'use strict'; 
    var logs; 
    return { 
     getDitLogs : function() { 
      return logs; 
     }, 

     setDitLogs : function (data) { 
      logs = data; 
     } 
    } 

}); 

mainCtrl.js

$scope.searchLogs = function() { 
    $scope.modalInstance = $uibModal.open({ 
     templateUrl: '/view/modals/searchModal.html', 
     controller:'SearchController' 
    }); 
    searchFactory.setDitLogs($scope.event); 
} 

childCtrl.js

$scope.event = searchFactory.getDitLogs(); 
    console.log(searchFactory.getDitLogs()); 

main.html

<div class="col-md-12"> 
      <ul style="list-style: none;"> 
       <li ng-repeat="message in event track by $index"><span><strong>Log:</strong></span><span>{{message}}</span></li> 
      </ul> 
     </div> 

Antwort

1

$scope.modalInstance hat eine Eigenschaft namens opened, die ein Versprechen ist. ein Weg ist, dieses Versprechen zu warten, zu lösen, und dann ein Flag gesetzt, so dass searchFactory.setDitLogs() nicht aufgerufen werden:

$scope.searchLogs = function() { 
if(!$scope.doNotSetDit){ 
    $scope.modalInstance = $uibModal.open({ 
     templateUrl: '/view/modals/searchModal.html', 
     controller:'SearchController' 
    }); 
    $scope.modelInstance.opened.then(function(){$scope.doNotSetDit =true}); 
    searchFactory.setDitLogs($scope.event); 

} }

+0

Dank dieser Lösung für mich gearbeitet, ich eine andere Lösung found ist angular.copy (data) erstellt eine neue Instanz für Sie. – hussain

Verwandte Themen