Angularjs: dziwne zachowanie

0

hej,
mam pewien problem w angular, mam dwa kontrolery: ProductsController (ktory wywala mi cala liste produktow) oraz ProductDetailsController (szczegoly konkretnego produktu).
Moj routing wyglada tak:

angular.module('showApp', ['ngAnimate', 'ngCookies', 'ngResource', 'ngRoute', 'ngSanitize', 'ngTouch', 'ngAnimate', 'angular-underscore', 'ngActivityIndicator']).config(function ($routeProvider) {
    return $routeProvider
    .when('/', {
        templateUrl: 'views/products.html',
        controller: 'ProductsController'
    })
    .when('/project/:productId', {
        templateUrl: 'views/productDetails.html',
        controller: 'ProductDetailsController'
    })

    .otherwise({
        redirectTo: '/'
    });
});

kod w widoku wyglada tak:

<div class="circleWrapper {{getRandomSpin()}}" ng-repeat="product in products" hm-tap>
	 <a href="#/product/{{product.Code}}">
	 
        <div class="descriptionWrapper">
            <h1 class="productName">{{product.Code}}</h1>
            <h1 class="customerName">{{product.CustomerName}}</h1>
        </div>

i teraz problem:
Jak kllikne w link to przekieruje mnie to wlasciwej strony, ale w ogole nie pobiera mi danych tego produktu. Natomiast jak wpisze w URL np.: localhost:9000/#/product/231 to ladnie mi pobiera ten produkt i go wyswietla. W czym jest problem? (kolega mi powiedzial abym poszukal czegos co sie nazywa "apply()" ale nie umiem tego a)zrozumiec b)wykorzystac)

Jak sprawdzam debuggerem w Chrome to po kliknieciu w linka w ogole nie jest odpalany ten kontroler ProductDetails, natomiast jak wejde przez linka to wtedy jest odpalany

0

Wrzuć cały kod na plunkr, bo z obecnego można wywnioskować jedynie, że prawdopodobnie źle skopiowałeś go na forum. W routingu masz "project" w href masz "product", więc wykona się blok "otherwise" i logicznie rzecz biorąc kontroler ProductDetailsController nie zostanie podpięty. Dodatkowo używaj raczej dyrektywy ngHref, zamiast href. Apply to zły pomysł w 99% przypadków. Kolega uczy złych nawyków. Produkt pobierz w resolve, jeśli kontroler dotyczy całego widoku, nie bezpośrednio w kontrolerze - to powoduje, że kontrolery tyją niepotrzebnie. Dodatkowo wtedy masz zawsze promise resolved (geez, tracę umiejętność pisania po polsku) i w kontrolerze masz już gotowe dane z serwisu, nie musisz na nie czekać.

0

Po dlugim debugowaniu mam takie cos:
wykonuje to:

 return $q.defer().resolve(this.products);

i dostaje blad:

TypeError: Cannot read property 'then' of undefined
1
angular.module('app').factory('srv', function($q) {
  return {
    fn: function() {
      var dfd =  $q.defer();

      // insert here async block
        dfd.resolve(1);
      // end of async block

      return dfd.promise;
    }
  };
});

1 użytkowników online, w tym zalogowanych: 0, gości: 1