2016-04-14 11 views
-1

AngularJS ve Elasticsearch kullanarak küçük bir arama uygulamasına sahip olun. Uygulamamı $scopecontroller As sözdizimini kullanarak dönüştürmeye çalışıyorum. Rotalarım/eyaletlerim için UI Router kullanıyorum. Durum bildirimlerimdeContoller uygulamak için en iyi pratik yolu UI Router kullanmakta olduğunuz gibi

kullanmayı denedim. Ve sonra denetleyicide var vm = this; kapsamını bağlama.

Arama girişimde ng-model="searchTerms" anahtarını ng-model="home.searchTerms" numaralı telefona değiştirdim ve başka herhangi bir yere bağlama işlemi gerekebilecekti. Hiçbiri işe yaramıyor mu?

Bir ebeveyn divanda ng-controller="HomeCtrl as home" kullanmak daha iyi midir? Bu en iyi uygulama mı? UI Router ile çalışacak mı?

Şimdi sahip GÜNCELLEME

var vm = this; 
vm.searchTerms = searchTerms; 

AMA hala çalışmıyor, ben almaya devam Krom konsoluna

Uncaught ReferenceError: searchTerms is not defined(…) 

GÜNCELLEME KONTROL bu hata

'use strict'; 

angular.module("searchApp.autocomplete", []) 
    .controller('HomeCtrl', ['$sce', '$state', '$stateParams', 'searchService', function($sce, $state, $stateParams, searchService) { 

    var vm = this; 
    var searchTerms = searchTerms; 
    vm.searchTerms = searchTerms; 

     vm.noResults = false; 
     vm.isSearching = false; 

    vm.results = { 
     searchTerms: null, 
     documentCount: null, 
     documents: [], 
     queryTime : null, 
     searchTermGrams: null, 
     itemsPerPage: 10, 
     maxResults: 100 
    }; 

     //autocomplete 
    vm.autocomplete = { 
     suggestions: [], 
     corrections: [] 
    }; 
    vm.showAutocomplete = false; 
+0

'vm' aracılığıyla' searchTerms' öğesini görüntülüyorsunuz? örneğin, denetleyicide, vm.searchTerms = searchTerms gibi bir ifadeniz var mı? – ankur

+0

@ankur Gecikme için üzgünüm, biraz dışarı çıkmak zorunda kaldım, kodumu kontrol edeyim – user3125823

+0

@ankur lütfen UPDATE yukarıda – user3125823

cevap

1

controller: 'HomeCtrl as home', ui yönlendiriciyle çalışacaktır.

DÜZENLEME:

Ayrıca tanımlayabilir ve önce veya vm atayarak ise herhangi bir nesne/değişkenlerini başlatmak gerekir . Güncellenen kodunuzda, searchTerms'u tanımladınız, ancak başlatılmadı. searchTerms'un bir dize olduğunu varsayarak bunu düzeltmenin olası yolları için lütfen aşağıya bakın. Eğer ayrı bir iç değişken olması gerekmiyorsa (doğrudan vm.searchTerms init edebilir,

var searchTerms = searchTerms || ''; 

var vm = this; 
vm.searchTerms = searchTerms; 

ya:

var searchTerms = ''; 

var vm = this; 
vm.searchTerms = searchTerms; 

veya kullanım ihtiyaçlarına bağlı olarak, yalnızca o tanımsız ise başlatabilir Ancak çoğu durumda ben şahsen bu yöntemi) tercih etmez:

var vm = this; 
vm.searchTerms = ''; 

yayınlanan kod kalanını ilgili olarak, genellikle size acces gerekenleri görünümünüze göstermelidir oradan kontrol cihazınızın (veya servis/fabrika, vb.) içinde kalanları saklayın. Şimdiye kadar henüz sağlam, tekil bir dizi en iyi uygulamalara rastladım, ancak başlamak için harika bir yer John Papa'nın Angular Style Guide.

+0

Teşekkür ederim, ben bu projeyi Angular öğrenmek için kullandım ve onun için bir macera oldu en az! – user3125823

+0

Yardım almaktan memnun oldum. :) – ankur

İlgili konular