2014-09-02 6 views
41

मैं कोणीय में निर्देश लिख रहा हूं और उपर्युक्त त्रुटि प्राप्त कर रहा हूं। मैं एक किताब से कोड का उपयोग कर रहा हूँ।

.directive('myFacebook', [function(){ 
return { 
    link: function(scope,element,attributes) { 
     (function(d) { 
       var js, id = 'facebook-jssdk', 
        ref = d.getElementsByTagName('script')[0]; 
       if (d.getElementById(id)) { 
        return; 

       } 
       js = d.createElement('script'); 
       js.id = id; 
       js.async = true; 
       js.src = "//connect.facebook.net/en_US/all.js"; 
       ref.parentNode.insertBefore(js, ref); 
      }(document)); 
      // Initialize FB 
      window.fbAsyncInit = function() { 
       FB.init({ 

        appId: 'xxxx', //birthday reminder 
        status: true, // check login status 
        cookie: true, // enable cookies to access the session 
        xfbml: false // parse XFBML 
       }); 
       //Check FB Status 
       FB.getLoginStatus(function(response) { 
        xxxx 
       }); 
      }; 
     scope.username=''; 
    }, 
    scope: { 
      permissions: '@', 
      myFriends: '=friends' 
     }, 
    controller: function($scope) { 
     $scope.loadFriends = function() { 
      FB.api('/me/friends?fields=birthday,name,picture', function(response) { 
        $scope.$apply(function() { 
         $scope.myFriends = response.data; 
        }); 
       }); 
     } 
    }, 

    template:'Welcome {{username}}' 
    }}]) 

मैं

$scope.$apply(function() { 
      $scope.myFriends = response.data; 
}); 

एचटीएमएल कोड

<div my-facebook></div> 
<h1> My Friend's Birthday Reminder</h1> 
<div ng-repeat="friend in myFriends"> 
    {{friend.name}} 
</div> 
+0

कृपया HTML पोस्ट करें जहां आप 'myFacebook' निर्देश का उपयोग कर रहे हैं। – bmleite

उत्तर

62

में त्रुटि मिलती है समस्या यह है कि आप निर्देश तत्व <div my-facebook></div> में विशेषता friends को परिभाषित नहीं कर रहे हैं।

आपके द्वारा निर्धारित जब इस तरह के निर्देश की गुंजाइश:

scope: { 
    permissions: '@', 
    myFriends: '=friends' 
} 

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

  • बाइंड डोम का मूल्य ही नाम के साथ विशेषता
  • स्थानीय दायरे के myFriends संपत्ति और अभिभावक दायरे के friends संपत्ति
  • के बीच द्वि-दिशात्मक बाध्यकारी सेट करें

चूंकि आप डीओएम में friends विशेषता को परिभाषित नहीं कर रहे हैं, कोणीय द्वि-दिशात्मक बाध्यकारी नहीं बना सकता है और त्रुटि फेंकता है। अधिक जानकारी here

अपने डोम पर friends विशेषता परिभाषित करें और यह समस्या को ठीक करना चाहिए:

<div my-facebook friends="friendList"></div> 

और, उदाहरण के लिए, नियंत्रक पर:

app.controller('Ctrl', function($scope) { 
    $scope.friendList = []; 
}); 
+0

अच्छा, यह एक आकर्षण की तरह काम किया। इसे भी समझाने के लिए धन्यवाद। – harshit

3

मैं इस एक ही मुद्दे पर और मेरे लिए चलाने समस्या डीओएम नाम में ऊपरी केस अक्षर थी।

<div my-facebook FRIENDS="friendList"></div> 

काम नहीं किया है, लेकिन

<div my-facebook friends="friendList"></div> 

काम किया। मैंने इस पर काम करने में एक दिन बिताया और दुर्घटना से समाधान पाया।

+0

आप सभी ऊपरी मामले में पृथ्वी पर एक विशेषता का नाम क्यों लगाएंगे? :) – AsGoodAsItGets

+0

दिलचस्प सवाल, दुर्भाग्य से मुझे याद नहीं है :) – JohnP

16

ओपीएस प्रश्न का सीधा जवाब नहीं है, लेकिन यह मेरे साथ ऐसा हुआ है जो किसी और के लिए भविष्य में Google को यह त्रुटि दे सकता है। यह जॉनपी के उत्तर के समान है।

यह त्रुटि तब भी दिखाई दे सकती है जब आपके निर्देश में camelCase विशेषता है।

तो अगर आप हैं:

<div my-facebook myFriends></div>

यह त्रुटि फेंक देते हैं।

इसका कारण यह है (कोणीय documentation से लिया गया) है:

Angular normalizes an element's tag and attribute name to determine which elements match which directives. We typically refer to directives by their case-sensitive camelCase normalized name (e.g. ngModel). However, since HTML is case-insensitive, we refer to directives in the DOM by lower-case forms, typically using dash-delimited attributes on DOM elements (e.g. ng-model).

The normalization process is as follows:

Strip x- and data- from the front of the element/attributes.

Convert the : , - , or _ -delimited name to camelCase.

तो <div my-facebook myFriends></div>

<div my-facebook my-friends></div>

+0

सटीक एक ही समस्या, इसके कोणीय 1.5.3 और मेरी विशेषता noOfRowsPerPage थी और यह काम नहीं किया! यह noofrowsperpage होना चाहिए !! अजीब! – user1829319

+2

@ user1829319 यह आपके निर्देश में 'बिना किसी पंक्ति-प्रति-पृष्ठ' होना चाहिए: 'स्कोप: {noOfRowsPerPage:' = '} '? इस तरह आप अभी भी अपनी जावास्क्रिप्ट में camelCase का उपयोग कर सकते हैं। –

+2

@ user1829319 हालांकि बेहतर समाधान शायद 'पंक्ति-प्रति-पृष्ठ' या यहां तक ​​कि केवल 'पंक्तियां' होगा। इसे पढ़ने में आसान बनाता है। –

64

मेरे समाधान को लागू करने के लिए यहाँ पता लगाने के लिए कठिन है, लेकिन आसान था बनने के लिए की आवश्यकता होगी । मुझे इसे के बराबर बदलना पड़ा (ध्यान दें कि प्रश्न चिह्न विशेषता को वैकल्पिक बनाता है। 1.5 से पहले यह स्पष्ट रूप से आवश्यक नहीं था)।

scope: { 
    permissions: '@', 
    myFriends: '=?friends' 
} 
+11

यह स्वीकार्य उत्तर – joshcomley

+0

महान उत्तर होना चाहिए! यहां अपना उत्तर ढूंढने के बाद, मुझे अंत में संदर्भ मिला: https://docs.angularjs.org/api/ng/service/$compile#-scope- –

+0

यह सबसे अच्छा जवाब है। धन्यवाद! – suzi167

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