ちょいネタです。
Lightningコンポーネントには双方向バインディングがない(と思う)ので、AngularJSを動かしてみました。(Knockout.jsの方が軽くてよさそうですけど。)
でも、普通にng-repeat
とかやるとレンダリングした時に属性を消しやがりまして動きません。
ポイント
-
ng-controller
などは削除されてしまうので、data-ng-controller
にする。 -
ng-app
は最初の一つしか自動起動しないため、複数コンポーネントが配置された場合に動かなくなるので、angular.bootstrap
で手動起動する。
Component
<aura:component access="global" implements="flexipage:availableForAllPageTypes" description="">
<ltng:require scripts="/resource/angular_min_js" afterScriptsLoaded="{!c.doInit}" />
<div id="{!globalId + '_sampleApp'}" data-ng-controller="MainCtrl">
<h1>Angular!</h1>
<p>{{msg}}</p>
</div>
</aura:component>
Controller
({
doInit: function(component, event, helper) {
var globalId = component.getGlobalId();
var appName = globalId + '_sampleApp';
var app = angular.module(appName, []);
app.controller('MainCtrl', ['$scope', function($scope) {
$scope.msg = "Hello!";
}]);
angular.bootstrap(document.getElementById(appName), [appName]);
}
})
動く
おしまい
追記(2015/04/28 14:03)
AngularJSはwindow.angular
にセットしてしまう。
クロージャで囲んでも中でwindow.angular
にセットしてしまうので、他のバージョンのAngularJSを使ったコンポーネントと共存できなくなってしまう。
LightningコンポーネントでAngularJSを使うのは無理かも。。。