2013-07-03 12 views
69

पर काम नहीं कर रहा है मुझे एक चर को दूसरे नियंत्रक को पास करने की आवश्यकता है। मेरे पास निम्न कोड है जो ListCtrl से संबंधित है:एक नियंत्रक फ़ंक्शन पर कॉल के साथ कोणीय एनजी-क्लिक

<a href="#items" data-router="article" ng-click="changeListName('metro')"> 

लिंक अन्य नियंत्रक, ItemCtrl पर जा रहा है।

मैं एक चर को ItemCtrl पर पास करना चाहता हूं। मैं एक सेवा बुलाया SharedProperties का उपयोग कर के बारे में सोचा:

service('sharedProperties', function() { 
    var list_name = ''; 

    return { 
     getListName: function() { 
      return list_name; 
     }, 
     setListName: function(name) { 
      list_name = name; 
     } 
    }; 
}); 

जब लिंक पर क्लिक किया है, मैं निम्नलिखित समारोह को गति प्रदान करने एक कोणीय क्लिक करें घटना फोन:

$scope.changeListName = function(name) { 
    sharedProperties.setListName(name); 
}; 

हालांकि, एनजी क्लिक प्रतीत नहीं होता अपने साझा किए गए संपत्ति के मूल्य को बदलने के लिए ...

अद्यतन

मैं च अंदर एक अलर्ट एनजी-क्लिक द्वारा ट्रिगर किया गया और चेतावनी ट्रिगर हो गई, जैसा कि यह होना चाहिए।

हालांकि, जब मैं इस तरह मेरी समारोह लिखें:

$scope.changeListName = function(name) { 
    sharedProperties.setListName(name); 
}; 

यह काम नहीं करता है ... यह कैसा दिखता 'sharedProperties.setListName (नाम),' निष्पादित किया जाता है नहीं ...

अगर मैं एक डमी नाम (उदाहरण के लिए। मेट्रो), यह काम करता है के साथ समारोह के बाहर रख दिया ..

अद्यतन 3

मैं कई चीजों की कोशिश की और मैं कर रहा हूँ बहुत भरोसा है कि समस्या इस फ़ंक्शन के साथ है:

$scope.changeListName = function(list_name) { 
    sharedProperties.setListName(list_name); 
}; 

क्या आपको कोई विचार है कि यह क्यों हो रहा है?

उत्तर

96

आप शायद ngClick के साथ ngHref निर्देश का उपयोग करना चाहिए: http://plnkr.co/edit/FSH0tP0YBFeGwjIhKBSx?p=preview

<body ng-controller="MainCtrl"> 
    <p>Hello {{name}}!</p> 
    {{msg}} 
    <a ng-href='#here' ng-click='go()' >click me</a> 
    <div style='height:1000px'> 

     <a id='here'></a> 

    </div> 
    <h1>here</h1> 
    </body> 

var app = angular.module('plunker', []); 

app.controller('MainCtrl', function($scope) { 
    $scope.name = 'World'; 

    $scope.go = function() { 

    $scope.msg = 'clicked'; 
    } 
}); 

मैं नहीं जानता कि यदि इस पुस्तकालय आप कर रहे हैं के साथ काम करेंगे:

<a ng-href='#here' ng-click='go()' >click me</a> 

यहाँ एक उदाहरण है उपयोग कर रहा है लेकिन यह कम से कम आपको ngClick फ़ंक्शन को लिंक और उपयोग करने देगा।

** अद्यतन **

यहाँ सेट का एक डेमो है और एक सेवा के साथ ठीक काम कर रहा हो।

http://plnkr.co/edit/FSH0tP0YBFeGwjIhKBSx?p=preview

var app = angular.module('plunker', []); 

app.controller('MainCtrl', function($scope, sharedProperties) { 
    $scope.name = 'World'; 

    $scope.go = function(item) { 
    sharedProperties.setListName(item); 


    } 

    $scope.getItem = function() { 

    $scope.msg = sharedProperties.getListName(); 
    } 
}); 

app.service('sharedProperties', function() { 
    var list_name = ''; 

    return { 

     getListName: function() { 
      return list_name; 
     }, 
     setListName: function(name) { 
      list_name = name; 
     } 
    }; 


}); 

* संपादित करें *

https://github.com/centralway/lungo-angular-bridge जो कैसे lungo और कोणीय का उपयोग करने के बारे में बात करती समीक्षा करें। यह भी ध्यान रखें कि यदि कोई अन्य लिंक ब्राउज़ करते समय आपका पृष्ठ पूरी तरह से पुनः लोड हो रहा है, तो आपको अपनी साझा संपत्तियों को स्थानीय स्टोरेज और/या कुकी में रखना होगा।

+0

ऐसा लगता है कि 'एनजी-रेफ' और 'href', 'ng-click' दोनों ट्रिगर किए गए हैं और मेरे फ़ंक्शन को सक्रिय करते हैं। मैंने अपनी समस्या को बेहतर ढंग से प्रतिबिंबित करने के लिए अपना उत्तर अपडेट किया। –

+0

क्या आप अब एक अलग सवाल पूछ रहे हैं? – lucuma

+0

नहीं, मेरी समस्या हल नहीं होती है। –

3

मुझे लगता है कि आपको त्रुटियां नहीं मिल रही हैं या आपने उनका उल्लेख किया होगा। यदि ऐसा है, तो href विशेषता मान को हटाने का प्रयास करें ताकि पृष्ठ आपके कोड को निष्पादित करने से पहले नेविगेट न हो। कोणीय में href गुण खाली छोड़ने के लिए पूरी तरह से स्वीकार्य है।

<a href="" data-router="article" ng-click="changeListName('metro')"> 

इसके अलावा मैं नहीं जानता कि क्या data-router कर रही है लेकिन अगर आप अभी भी उचित परिणाम नहीं मिल रहा है, यही कारण है कि हो सकता है।

+0

डाटा रूटर है लंगो जेएस के लिए। इसकी अपनी रूटिंग प्रणाली है। मैं href को नहीं हटा सकता क्योंकि तब लूगो को पता नहीं चलेगा कि मार्ग कहाँ है ... –

4

अपने कोणीय कॉन्फ़िगरेशन में नियंत्रक को परिभाषित करते समय उपनाम का उपयोग करें। उदाहरण के लिए: नोट: मैं टाइपस्क्रिप्ट का उपयोग कर रहा हूं

बस नियंत्रक पर ध्यान दें, इसमें homeCtrl का उपनाम है।

module MongoAngular { 
    var app = angular.module('mongoAngular', ['ngResource', 'ngRoute','restangular']); 

    app.config([ 
     '$routeProvider', ($routeProvider: ng.route.IRouteProvider) => { 
      $routeProvider 
       .when('/Home', { 
        templateUrl: '/PartialViews/Home/home.html', 
        controller: 'HomeController as homeCtrl' 
       }) 
       .otherwise({ redirectTo: '/Home' }); 
     }]) 
     .config(['RestangularProvider', (restangularProvider: restangular.IProvider) => { 
     restangularProvider.setBaseUrl('/api'); 
    }]); 
} 

और यहाँ जिस तरह से यह उपयोग करने के लिए है ...

ng-click="homeCtrl.addCustomer(customer)" 

यह .. यह रूप में यह मेरे लिए काम किया आप के लिए काम कर सकते हैं ... प्रयास करें;)

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