2013-09-28 9 views
6

में निर्देशों में $ स्थान का उपयोग कैसे करें मैं एक निर्देश बना रहा हूं जिसमें उपयोगकर्ता इसे दूसरे पृष्ठ पर ले जाता है। कुछ हद तक एक अनुकूलित "href" टैग की तरह। मैं उम्मीद कर रहा था कि $ स्थान पुनर्निर्देशन समारोह का ख्याल रखेगा लेकिन कारणों से मुझे ये नहीं पता, यह काम नहीं करता है। अगर मैं नियंत्रक में $ स्थान का उपयोग करता हूं तो यह काम करता है लेकिन निर्देश के भीतर से, यह नहीं करता है। यहां कोड है:AngularJs

angular.module("myAPP") 
    .directive('hpHref', ['$location' , function($location){ 
     return { 
      restrict : "A", 
      link : function(scope, el, attr) { 
        el.bind('click', function(){ 
         // more logic 
         console.log("Code reaches here:"); 
         $location.path("/" + attr.hpHref); 
        }); 
      } 
     } 
    }]); 

निर्देशक के हिस्से के रूप में नियंत्रक होने का भी प्रयास किया गया। यानी

angular.module("myApp") 
    .directive('hpHref', function(){ 
     return { 
      restrict : "A", 
      scope: {}, 
      controller : ['$scope', '$location', function($scope, $location){ 
       $scope.goToUrl = function (url) { 
        // some more logic 
        console.log("Code reaches here"); 
        $location.path(url); 
       }; 
      }], 
      link : function(scope, el, attr) { 
        el.bind('click', function(){ 
         scope.goToUrl(attr.hpHref); 
        }); 
      } 
     } 
    }); 

यह भी काम नहीं करता है। समस्या क्या है? और निर्देशों के भीतर $ स्थान का उपयोग कैसे किया जा सकता है?

+0

यह काम नहीं करता है क्योंकि आप शाब्दिक स्ट्रिंग "url" के पथ को सेट करने का प्रयास कर रहे हैं, यूआरएल तर्क का मूल्य नहीं। $ Location.path ("url") में url के आस-पास के उद्धरण निकालें –

+0

@ मार्कशेरेटा यह कोड को कॉपी करने में एक टाइपो था। मैंने – dade

+0

प्रश्न को अद्यतन किया है, अब $ apply.goToUrl क्या है? –

उत्तर

6

तो, उपरोक्त टिप्पणी के अनुसार, जब भी आप कोणीय के अपने ईवेंट हैंडलर (ng-click आदि) के बाहर कोणीय को कॉल करते हैं, तो आपको $scope.$apply() पर कॉल करना होगा। JQuery ईवेंट सबसे आम मामला हैं जिन्हें लोग $apply() पर कॉल करना भूल जाते हैं।

+1

$ गुंजाइश। $ लागू() कहां? element.on के अंदर ('क्लिक करें', फ़ंक्शन() {})? – debuggerpk