2016-07-23 2 views
0

Ich habe eine Funktion make_value_summary, die generisch eine Zusammenfassung von $scope Felder macht. Hier verwende ich es, um location_summary zu konstruieren, gebunden an die Ansicht durch ng-bind. location_summary wird aktualisiert, wenn die Felder street, suburb oder state aktualisiert werden.

$scope.location_summary = function() { 
    var fields = [ 
     'street', 
     'suburb', 
     'state', 
    ]; 
    return make_value_summary(fields, $scope, 'Location?'); 
}; 

function make_value_summary(fields, $scope, initial) { 
    var summary = ''; 
    fields.forEach(function(field) { 
     if ($scope[field] && $scope[field] !== '0') { 
      if (summary) { 
       summary = summary + ', ' + $scope[field]; 
      } 
      else { 
       summary = $scope[field]; 
      } 
     } 
    }); 
    if (summary) { 
     return summary[0].toUpperCase() + summary.substring(1); 
    } 
    else { 
     return initial; 
    } 
} 

Frage 1: Wie dynamisch aktualisiert werden nicht location_summary, von meinem ersten Blick auf den Code es wie make_value_summary sieht nur einmal ausgeführt werden, wenn location_summary zuerst zugewiesen wird.

Frage 2: Ich möchte location_summary zu einem ganz anderen Teil der Ansicht über einen Dienst binden. Wie gehe ich vor, um location_summary an einen Service Location anzufügen. Ich habe versucht, $watch aber ohne Erfolg zu verwenden.

$scope.$watch('location_summary', function(newValue, oldValue) { 
    // Just gives unevaluated reference to location_summary function 
    console.log(newValue); 
    console.log(oldValue); 
}); 

EDIT

erhielt eine Lösung 2 durch die Funktion in der Uhr 'Auswerten', das heißt in 'location_summary()'$watch() passieren. Möchte immer noch eine Antwort auf meine erste Frage!

Antwort

0

Basierend auf Ihren Codes, bitte führen Sie dieses Snippet.

angular.module("app",[]) 
 
.controller("appController",appController); 
 

 
appController.$inject=["$scope"]; 
 
function appController($scope){ 
 
$scope.location_summary = function() { 
 
    var fields = [ 
 
     'street', 
 
     'suburb', 
 
     'state', 
 
    ]; 
 
    return make_value_summary(fields, $scope, 'Location?'); 
 
}; 
 

 
function make_value_summary(fields, $scope, initial) { 
 
    var summary = ''; 
 
    fields.forEach(function(field) { 
 
     if ($scope[field] && $scope[field] !== '0') { 
 
      if (summary) { 
 
       summary = summary + ', ' + $scope[field]; 
 
      } 
 
      else { 
 
       summary = $scope[field]; 
 
      } 
 
     } 
 
    }); 
 
    if (summary) { 
 
     return summary[0].toUpperCase() + summary.substring(1); 
 
    } 
 
    else { 
 
     return initial; 
 
    } 
 
} 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 

 
<body ng-app="app" ng-controller="appController"> 
 
    
 
    <input ng-model="street"> 
 
    <input ng-model="suburb"> 
 
    <input ng-model="state"> 
 
    
 
    {{location_summary()}} 
 
    </body>

Verwandte Themen