Avatar billede webdesigner Praktikant
10. februar 2015 - 15:59 Der er 4 kommentarer

Angular, data Fra Service i Ng-repeat og ændring af Felter fra et andet service kald.

Hej er ved at lave en side med widgets.
har et Json som hentes med en service

Widgets = [{
            'Title': 'VEJRET',
                  contents: {
                    {'content' : 'Mandag [ForCast]'},
                    {'content' : 'Tirsdag [ForCast]'},
                    {'content' : 'Onsdag [ForCast]'},
                    {'content' : 'Torsdag [ForCast]'}
                  }
          },{
            'Title': 'Møder',
                  contents: {
                    {'content' : 'Møde [Meetings]'},
                    {'content' : 'Møde [Meetings]'},

                  }
          }
]

HTML =
<div ng-repeat="widget in Widgets">
    <div class="title">{{widget.Title}}</div>
    <div ng-repeat="content in widget.contents">{{content.content}}</div>
</div>

nu er det sådan at jeg gerne vill have [ForCast] erstattet med data fra en anden service
som henter Vejret

og igen en med møder.

hvordan få jeg læettets erstattet dem.?

har det andet data i et array jeg har hente fra en vejr og møde service..

weather = [
'Solskin',
'let overskyet',
'Solskin',
'Regn']

møde = [
'Manddag d 16/2 med DMI',
'Møde med Disney om ny grafisk algoritme']

Pga. måden den executer loops på kan jeg ikke itterer over dem..
har også prøvet med en string replace men får undefined på nogle af tingenen fordi jeg ikke hved om den skriver til variablem med  eller ej..


her er min string replace.
        if (firstIndex) {
            $scope.ReplaceCount = 0;
        }
        if (str.indexOf("[ForCast]") !== -1 && typeof $scope.ForCast!= 'undefined') {
$scope.ReplaceCount + " Savings Value " + $scope.ForCast[$scope.ReplaceCount]);
    if (infoData == 'undefined') {
            str = str.replace("[SAVING]", $scope.ForCast[$scope.ReplaceCount]);
            $scope.ReplaceCount = $scope.ReplaceCount + 1;

        }
        return str;

hvordan kan jeg mest effiktivt erstate [] med cointent ?
kunn jeg lave en {{content}} fra min Json ?
Avatar billede softspot Forsker
10. februar 2015 - 17:22 #1
Definér en funktion, til at udskifte værdierne, på din controller's $scope og kald denne funktion i repeat-løkken.

<div ng-repeat="widget in Widgets">
    <div class="title">{{widget.Title}}</div>
    <div ng-repeat="content in widget.contents">{{replaceVal(content.content)}}</div>
</div>


Din controller skal så definere replaceVal-funktionen:

angular
  .module("app", [])
  .factory("forcastSvc", function() {
      return {
        hent: function(kriterium) {
            return "godt vejr";
        }
      };
  })
  .controller("ctrl", function($scope, forcastSvc) {
      $scope.Widgets = [/* data til dine widgets her... */];
      $scope.replaceVal = function(val) {
        return val.replace(/\[ForCast\]/gi, forcastSvc.hent(kriterium);
      };

  });


Værdien til kriterium ved jeg ikke lige hvor du får fra, men ud fra den datastruktur du har, må det være ugedagen i den værdi du sender med til replaceVal-funktionen. Det har jeg ikke indarbejdet i eksemplet.

Du skal muligvis have gang i forskellige services og en sondring af, hvilken service der skal kaldes i replaceVal-funktionen.
Avatar billede webdesigner Praktikant
12. februar 2015 - 23:00 #2
definerede funktionen i scope.
men den retuner undefined på mange af variablerne..
Avatar billede softspot Forsker
13. februar 2015 - 09:00 #3
Kan du evt. prøve at vise din kode, for det er umådeligt svært at fejlfinde på noget man ikke kan se...
Avatar billede webdesigner Praktikant
02. marts 2015 - 10:49 #4
@softspot

Endte med at erstatte teksten nå den kørte igennem forloopet og byggede json objektet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester