2014-01-11 56 views
4

我想複製下面的jsfiddle只使用角度(沒有jQuery)。AngularJS - 附加到DOM並綁定一個事件

http://jsfiddle.net/E7xER/381/

基本上我想設置事件偵聽器綁定到其目前還不存在的元素。與jQuery這可以實現:

$('#container').on('click', '.class', myFunction); 

什麼是綁定到還不存在元素「角辦法」?我懷疑我需要創建一個新的指令來做到這一點,我相信我可能需要注入$ compile來編譯新添加的DOM元素。我是AngularJS的新手,但我不確定如何實現這一點。

回答

3

http://jsfiddle.net/dB7nt/

喜歡這個?

var myApp = angular.module('myApp', []); 

myApp.directive('myWidget', function() { 
    var linkFn; 
    linkFn = function(scope, element, attrs) { 
     scope.boxes = []; 

     scope.addBox = function() { 
      scope.boxes.push({}); 
     }; 

     scope.color = function (b) { 
      b.isRed = true; 
     } 
    }; 
    return { 
     restrict: 'E', 
     link: linkFn, 
     template: '<button ng-click="addBox()">Add a box</button><BR/><div><div class="box" ng-repeat="b in boxes" ng-click="color(b)" ng-class="{ red: b.isRed }"></div></div>', 
     scope: { 
     } 
    }; 
}); 
+1

真棒,謝謝! – circuitry

2

就我個人而言,我會爲此創建一個控制器。

這是您的fiddle using a controller

var myApp = angular.module('myApp', []); 

myApp.controller("BoxCtrl", function ($scope) { 
    $scope.boxes = []; 
    $scope.addBox = function() { 
     $scope.boxes.push(0); 
    }; 
    $scope.colorBox = function (box, index) { 
     $scope.boxes[index] = 1; 
    }; 
    $scope.isBoxClicked = function (box) { 
     return { 
      'background-color': (box == 1 ? 'red' : '#abc') 
     }; 
    }; 
}); 
+0

我絕對想要評估/理解控制器方法。在你的小提琴中,第一個不是紅色的盒子變成紅色,而不是任何一個盒子被點擊。我相信這一定是一個小錯誤。 – circuitry

+0

呵呵。現在解決。 – knrz

+1

小提琴是固定的。 [這是一個鏈接](http://jsfiddle.net/E7xER/383/)。 – knrz

相關問題