2015-11-08 135 views
0

我有以下的代碼,我想myevent屬性的值, 我嘗試得到它:attr.myevent但它返回「未定義」Angularjs屬性未定義

myApp.directive('eventCustom' , function(){ 
    return{ 
     restrict: 'AEC', 
     template: '<button myevent="click">clickme</button>', 
     link: function(scope, elem , attr){ 
      elem.bind('click' , function(){ 
       alert(attr.myevent); 
      }); 
     } 
    } 
}) 

http://jsfiddle.net/HB7LU/19711/

回答

3

您正在使用的方法將檢測<event-custom>元素上的屬性值,而不是指令模板內部元素的屬性值。

例如,如果你使用這個HTML,你會得到結果「測試」。

<event-custom myevent='test'></event-custom> 

爲了讓你可以從點擊事件訪問按鈕的myevent價值,但它不這樣做的理想方式。 Angular可以讓你避免處理DOM,你可能偶爾會這樣做,但是我認爲在這種情況下它是必須的。

link: function(scope, elem , attr){ 
     elem.bind('click' , function(event){ 
      alert(event.target.getAttribute("myevent")); 
     }); 
    } 

通常,如果你要檢測的模板中點擊事件,並接他們的指令,你可以使用例如控制器

myApp.directive('eventCustom' , function(){ 
    return{ 
     restrict: 'AEC', 
     template: '<button ng-click="clickme(\'test\')">clickme</button>', 
     link: function(scope, elem , attr){ 
     }, 
     controller: function($scope){ 
      $scope.clickme = function(value){alert(value)}; 
     } 
    } 
}) 
+0

我只想得到myevent的價值,我該怎麼做? –

+0

已更新答案,但如果可能的話(例如使用控制器),嘗試以更有角度的方式實現此更好可能更好。 – sheilak

0

您可以喜歡這個

myApp.directive('eventCustom' , function(){ 
return{ 
    restrict: 'AEC', 
    template: '<button myevent="click">clickme</button>', 
    link: function(scope, elem , attr){ 
     elem.bind('click' , function(){ 
      alert(attr.$$element.find('button').attr('myevent')); 
     }); 
    } 
} 

})

0

如果您使用以下你可以得到它。

elem.bind('click' , function(){ 
    alert(elem[0].childNodes[0].textContent); 
});