2015-03-09 19 views
23

मैं एक पृष्ठ के लिए निम्न राज्य सेटअप एक सार राज्य और वाक्य रचना के रूप में नियंत्रक का उपयोग:'के रूप में नियंत्रक' ui रूटर के साथ काम नहीं कर रहा है के रूप में उम्मीद का उपयोग

# Details page route 
.state 'title', 
    url: '/title', 
    abstract: true, 
    template: '<ui-view/>', 
.state 'title.show', 
    url: '/:titleId', 
    templateUrl: 'title/show.html' 
    controller: 'Title as t' 

इस के प्रयोजन के लिए डेमो कहता है कि मैं 'शीर्षक' नियंत्रक के 'टी' आवृत्ति के लिए एक चर निर्दिष्ट करता हूं और मैं इसे शीर्षक नियंत्रक फ़ंक्शन के अंदर करता हूं।

angular.module('title').controller 'Title', 
['$state', ($state) -> 
    this.name = 'Test' 

और मेरे विचार अंदर 'शीर्षक/show.html' मैं बाहर कि चर मैं सिर्फ पेज के लिए बनाया प्रिंट करने का प्रयास:

{{t.name}} 

मैं कुछ भी नहीं दिख रहा। लेकिन अगर मैं हमारे ui रूटर तत्व यह है कि इस तरह से 'शीर्षक/show.html' पृष्ठ लपेटता की और पर नियंत्रक निकालें:

<div ng-controller="Title as t"> 

तो सब कुछ अच्छा काम करता है। क्या कोई इस समस्या से पहले आया है। मेरे पास यह एक और ऐप में ठीक काम कर रहा है, इसलिए मैं अभी भी यह पता लगाने की कोशिश कर रहा हूं कि इस ऐप में क्या भिन्न हो सकता है, शायद जेएस लाइब्रेरी संस्करणों में एक अंतर।

+0

'यूई-राउटर' का कौन सा संस्करण आप उपयोग कर रहे हैं? –

+0

@version v0.2.13 – HomeBrew

उत्तर

43

अपने राज्य विन्यास में:

इसके बजाय controller: 'Title as t' की, कोशिश:

controller: 'Title', 
controllerAs: 't' 

संपादित: बस ui-router साथ एक न्यूनतम एप्लिकेशन को लागू किया और वाक्य रचना controller: Title as t भी काम करता है, संस्करण 0.2 में। ui-router के 0 आज के सबसे हालिया में से 0। जब मैं कोणीय स्कॉप्स का निरीक्षण करता हूं तो मैं t उदाहरण देख सकता हूं।

+4

नियंत्रक पर विचार करने में समस्या नहीं होनी चाहिए: 'ctrl as ctrl' को UI-राउटर द्वारा समर्थित किया गया है, https://github.com/angular-ui/ui-router/wiki#controllers –

+0

Yep देखें, देखा है कि मेरी पोस्ट के बाद डॉक, लेकिन उस वर्ष वाक्य रचना (मामले में ओपी 'ui-router' के एक पुराने संस्करण है) –

+1

हां के साथ प्रयास करने के लिए सुरक्षित हो सकता है में, मैं पहले से ही controllerAs लेकिन अभी भी एक ही समस्या की कोशिश की। – HomeBrew

12

नियंत्रक के लिए आपके नियंत्रक को this के मान को वापस करने की आवश्यकता है, यह सुविधा ठीक से काम करने के लिए है। यदि आप वी एम सिंटैक्स का उपयोग कर रहे हैं और लिखा है

return this 

या: के बाद से CoffeeScript परोक्ष अंतिम पंक्ति देता है, आप लिखने की ज़रूरत

vm = this 

आप नियंत्रक के अंत में लिख सकते हैं:

return vm 
+0

मैं इसे कोणीय 1.3.10 पर 'वापस लौटाए बिना काम कर रहा हूं' यह 'controllerAs के लिए this' ठीक से काम करने की सुविधा वापस जाने के लिए कहीं भी दस्तावेज है? – rahulserver

+0

मेरा कुछ पुराने कोड के साथ काम कर रहा था और एक डेकोरेटर अभी भी सजा के बजाय' this' :-P Thx की '$ scope' था एक गुच्छा! – Cody

10

इस किसी को भी मेरी समस्या टेम्प्लेट की गई विचारों का उपयोग लेकिन विचारों तत्व बाहर controllerAs निर्दिष्ट करने से के बारे में आया मदद करता है। यह हमेशा के लिए पता लगाने के लिए लिया। इस सूत्र के लिए ऋण https://github.com/driftyco/ionic/issues/3058

** गलत **

views: {'[email protected]': { templateUrl: 'views/listing.html' }}, 
controller: 'ListingCtrl', 
controllerAs: 'ctrl' 

** सही **

views: { 
    '[email protected]': { templateUrl: 'views/listing.html' }, 
    controller: 'ListingCtrl', 
    controllerAs: 'ctrl' 
} 
+0

धन्यवाद मैंने शाम को बर्बाद कर दिया कि यह क्यों काम नहीं कर रहा है :-(उम्मीद है कि इसे आयनिक में ठीक किया जाएगा। –

0

आप controllerAs वाक्य रचना के लिए अपने controller function के अंत में return this; करना होगा काम करने के लिए ।

angular.module('title').controller 'Title', 
['$state', ($state) -> 
    this.name = 'Test' 
    return this 

आप $scope साथ काम कर रहे हैं, तो आप return $scope के बजाय होगा।

angular.module('title').controller 'Title', 
['$state','$scope', ($state, $scope) -> 
    $scope.name = 'Test' 
    return $scope 

शुभकामनाएँ।

1

ऐसा लगता है कि ये उत्तर बहुत से काम कर रहे हैं।

मेरी UI Router जावास्क्रिप्ट फ़ाइल में, मेरा controllers इस तरह परिभाषित कर रहे हैं:

state('groupHome', { 
    url: '/groupHome', 
    templateUrl: 'app/modules/group-home/groupHome.html', 
    controller: 'GroupHomeController', 
    controllerAs: 'groupHomeController' 

और मेरे टेम्पलेट फ़ाइल में अगर मैं नाम groupHomeController यह है के साथ नियंत्रक तक पहुँचने का प्रयास मैं यहाँ एक अलग समस्या के साथ आया था पहुंचने में सक्षम नहीं है।

लेकिन दूसरी तरफ जब मैं इस के लिए मेरे कोड बदल पर:

state('groupHome', { 
    url: '/groupHome', 
    templateUrl: 'app/modules/group-home/groupHome.html', 
    controller: 'GroupHomeController as groupHomeController' 

यह बिल्कुल ठीक काम करता है।

+0

यह एक आकर्षण की तरह काम करता था। लेकिन क्या आपको पता है कि 'नियंत्रक' क्यों काम नहीं कर रहा है? –

संबंधित मुद्दे