2013-10-18 91 views
0

生成的元素,我開始與AngularJS和我需要綁定「負荷」和「錯誤」事件I幀:AngularJS:綁定事件偵聽器,使用jQuery,通過NG-重複

<ul data-ng-controller="WebServicesCtrl"> 
    <li data-ng-repeat="webservice in webservices"> 
     <a href="{{webservice.wsdl}}">{{webservice.name}}</a> 

     <iframe src="{{webservice.wsdl}}" class="hidden"></iframe> 

    </li> 
</ul> 

我試圖使用$scope.watch$scope.apply沒有成功。我需要將事件綁定到iframe創建上,因爲它會自動加載給定的src。事情是這樣的:

app.controller('WebServicesCtrl', function WebServicesCtrl($scope, $http) { 

    $http.get('/webservices').success(function(data /* from expressjs, yaaay! */) { 

     $scope.webservices = data; 

     /* make iframes listen to load and error right after scope change, 
      before AngularJS inject them. */ 
    }); 

}); 

MUST NOT使用<iframe onload="" onerror="" />。 我想知道jQuery的形式。 「純AngularJS」案也受到歡迎。只是不記得jQuery是不需要的。有時我們獲得了巨大的遺產,而且事情不可能很美。

我應該使用$injector或類似的東西嗎?那份文件太年輕了,很痛。感覺就像我不得不很快研究源代碼。

回答

4

你最好的選擇是使用圍繞這兩個標籤的指令。

<a href="{{webservice.wsdl}}">{{webservice.name}}</a> 

<iframe src="{{webservice.wsdl}}" class="hidden"></iframe> 

定義是這樣的:

app.directive("aIframe", function() { 
    return { 
     template: '<div><a href="{{webservice.wsdl}}">{{webservice.name}}</a>' + 
       '<iframe src="{{webservice.wsdl}}" class="hidden"></iframe></div>', 
     restrict: 'A', 
     scope: { 
     webservice: '=webService' 
     }, 
     link: function(scope, element, attrs) { 
     $(element).find("iframe").on("load", function() { 
     //some code 
     }); 
     $(element).find("iframe").on("error", function() { 
     //some code 
     }); 
     } 
    }; 
}); 

使用鏈接功能是,將每個指令進行初始化時上運行它會運行範圍綁定從完成之後的優點ng-repeat範圍。

你的HTML現在將改變爲:

<ul data-ng-controller="WebServicesCtrl"> 
    <li data-ng-repeat="webservice in webservices"> 
     <div a-iframe web-service="webservice"></div> 
    </li> 
</ul> 

更多directives,它的參數,在這裏:AngularJS: Directives

+0

謝謝你很多,@PraveenramBalachandar!我認爲這將會完成這項工作。 只是爲了好奇,有沒有其他的「常用」方式? 我剛剛意識到我會花一些痛苦的日子,直到這個解決方案,所以知道相似之處是明智的。 –

+1

angularJS中的一般原則是將控件包裝爲指令,以便更好地控制元素。特別是在類似於你的情況下。此外,它使您可以在幾乎任何控制器中使用此功能,而不僅限於此HTML結構。如果你想將事件綁定到由角度呈現的元素,這是最好和最乾淨的方法,以及「常用」方式:) –