在发现指令时遇到以下问题:
<div ng-app="twitterApp">
<div ng-controller="AppCtrl">
<div enter>Roll over to load more tweets</div>
</div>
</div>
var app = angular.module('twitterApp', []);
app.controller("AppCtrl", function ($scope) {
$scope.loadMoreTweets = function () {
alert("Loading tweets!");
}
})
app.directive("enter", function () {
return function (scope, element, attrs) {
element.bind("mouseenter", function () {
scope.loadMoreTweets();
})
}
})
他们说:“更好的做法是将 loadMoreTweets() 方法完全解耦,方法是将其作为视图中的字符串参数传递给指令,然后从指令中的 attrs 参数中检索它。”
所以它变成:
<div ng-app="twitterApp">
<div ng-controller="AppCtrl">
div enter="loadMoreTweets()">Roll over to load more tweets</div>
</div>
</div>
app.directive("enter", function () {
return function (scope, element, attrs) {
element.bind("mouseenter", function () {
scope.$apply(attrs.enter);
})
}
})
但这不会回到:
**<div onClick="loadMoreTweets()">Roll over to load more tweets</div>**
这让我很困惑,这样 JavaScript 就会再次与 HTML 混合在一起。我们不是在努力避免这种情况吗?这些天我们使用 addEventListener() 和 attachEvent() 还是我看错了。