2012-06-11 17 views
5

मैंने एक नियंत्रक परिभाषित किया है और दायरे में कुछ चर हैं। क्या मुझे पता चलेगा कि मेरे पास नियंत्रक के बाहर सीधे दायरे के चर के लिए एक मान असाइन करने का तरीका है (ng-model द्वारा नहीं)? साथ ही, क्या मैं वेब पेज के <script> तत्व में कहीं भी नियंत्रक के फ़ंक्शन को कॉल कर सकता हूं (ng-click का उपयोग करने के बजाय)?क्या Angularjs में सीधे नियंत्रक और दायरे से बातचीत करने का कोई तरीका है?

धन्यवाद!

चीयर्स, क्रिस

उत्तर

11

कोणीय में एक नियंत्रक परिभाषा वास्तव में एक क्लास और नहीं एक वस्तु है। संकलन चरण के दौरान एचटीएमएल में प्रत्येक स्थान पर नियंत्रक का संदर्भ दिया जाता है, कोणीय परिभाषित नियंत्रक वर्ग का उपयोग कर एक नया नियंत्रक वस्तु बनाता है। तो, आप एक ही नियंत्रक वर्ग के साथ एक से अधिक दायरे का उल्लेख कर सकते हैं।

हमेशा एक नियंत्रक से जुड़े एक गुंजाइश है और सभी चर उस दायरे से बंधे हैं। आप

var scope = angular.element("#myelement").scope(); 
//use the scope.... 

की तरह कुछ फोन करके एक विशेष HTML तत्व के दायरे का उपयोग कर सकता है यह भी अगर आप हमें बताएं कि आपने नियंत्रक बाहर से दायरे का उपयोग करने की कोशिश कर रहे हैं जाने अच्छा होगा।

अद्यतन

यह बूटस्ट्रैप टैब घटक ... आप इस रूप में

<tab> 
<pane title="tab1"><pane> 
<pane title="tab2"></pane> 
</tabs> 

यह वही एक है कि http://angularjs.org/ मुख्य पृष्ठ पर मौजूद है का उपयोग कर सकते है .. मैं तो बस यह अद्यतन किया है एक टैब बदलते समय घटनाओं को प्रसारित करने के लिए।

var directives = angular.module('myApp.directives', []); 
directives.directive('tabs', function() { 
    return { 
     restrict:'E', 
     transclude:true, 
     scope:{}, 
     controller:function ($scope, $element, $rootScope) { 
      var panes = $scope.panes = []; 

      $scope.select = function (pane) { 
       angular.forEach(panes, function (pane) { 
        pane.selected = false; 
       }); 
       pane.selected = true; 
       $rootScope.$broadcast("tabChanged", pane.title); 
      } 

      this.addPane = function (pane) { 
       if (panes.length == 0) $scope.select(pane); 
       panes.push(pane); 
      } 
     }, 
     template:'<div class="tabbable">' + 
      '<ul class="nav nav-tabs">' + 
      '<li ng-repeat="pane in panes" ng-class="{active:pane.selected}">' + 
      '<a href="" ng-click="select(pane)">{{pane.title}}</a>' + 
      '</li>' + 
      '</ul>' + 
      '<div class="tab-content" ng-transclude></div>' + 
      '</div>', 
     replace:true 
    }; 
}); 
directives.directive('pane', function() { 
    return { 
     require:'^tabs', 
     restrict:'E', 
     transclude:true, 
     scope:{ title:'bind' }, 
     link:function (scope, element, attrs, tabsCtrl) { 
      tabsCtrl.addPane(scope); 
     }, 
     template:'<div class="tab-pane" ng-class="{active: selected}" ng-transclude>' + 
      '</div>', 
     replace:true 
    }; 
}); 

यह एक घटना डिस्पैच टैब परिवर्तन ..

+0

मूल रूप से मैं AngularJS और बूटस्ट्रैप उपयोग करना चाहते हैं जब (टैब जावास्क्रिप्ट घटक) एक ही समय में। मैंने आरईएसटी आर्किटेक्चर लागू किया है और जब भी उपयोगकर्ता एक अलग टैब फलक पर स्विच करते हैं तो संसाधनों को पुनर्प्राप्त करना चाहते हैं। इसलिए मुझे टैब चेंज इवेंट से जुड़ना होगा और नियंत्रक के फ़ंक्शन को इस आरामदायक वेब सेवा से पुनर्प्राप्त करने के लिए कॉल करना होगा। साथ ही, शेष वेब सेवा से पुनर्प्राप्त होने पर, मुझे एक उपयोगकर्ता आईडी निर्दिष्ट करने की आवश्यकता है .. हालांकि मैंने पहले उपयोगकर्ता आईडी को ठीक किया है लेकिन जेएस फ़ाइल में नियंत्रक या दायरे में आईडी को कट्टर नहीं करना चाहते हैं। – Chris

+0

इसलिए मुझे दायरे में परिवर्तनीय (उपयोगकर्ता आईडी) सेट करना होगा और कॉल नियंत्रक के फ़ंक्शन (आराम से वेब सेवा से डेटा पुनर्प्राप्त करें) को बाहर से सेट करना होगा। कोई विचार यह कैसे पूरा किया जा सकता है? धन्यवाद! – Chris

+0

यदि यह संभव है, तो मैं कस्टम निर्देश का उपयोग करना टालना चाहूंगा जैसा कि लगता है कि सभी ब्राउज़र कस्टम निर्देश का समर्थन नहीं करते हैं। लेकिन आपके विचार के लिए धन्यवाद। – Chris

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

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