私は、transcludeを使用する単純な「モーダルダイアログ」ディレクティブを作成しました。私は "モーダルダイアログ"の中にform()を配置したいと思います。私は、ディレクティブ内に配置されたフォームのformControllerは親コントローラのスコープでアクセス可能になると予想しますが、そうではありません。 、次のフィドルを見てみてくださいください:http://jsfiddle.net/milmly/f2WMT/1/AngularJS:親コントローラからのトランスコードされたディレクティブ内に配置されたフォームのアクセスformController
完全なコード:
<!DOCTYPE html>
<html>
<head>
<title>AngJS test</title>
<link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/foundation/4.0.9/css/foundation.min.css">
<style>
.reveal-modal {
display: block;
visibility: visible;
}
</style>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/angularjs/1.1.4/angular.min.js"></script>
<script type="text/javascript">
var app = angular.module('app', []);
app.controller('appCtrl', function ($scope) {
$scope.model = {
id: 1, name: 'John'
};
$scope.modal = {
show: false
};
});
app.directive('modal', function() {
return {
scope: {
show: '='
},
transclude: true,
replace: true,
template: '<div class="reveal-modal small" ng-show="show"><div class="panel" ng-transclude></div></div>'
}
});
</script>
</head>
<body ng-app="app">
<div ng-controller="appCtrl">
<div class="panel">
Id: {{ model.id }}<br>
Name: {{ model.name }}<br>
Controller formController: {{ form }}<br>
Directive formController: {{ myForm }}<br>
</div>
<form name="form" class="panel">
<input type="text" ng-model="model.name">
</form>
<a ng-click="modal.show=!modal.show">toggle dialog</a>
<div modal show="modal.show">
<form name="myForm">
<input type="text" ng-model="model.name">
</form>
</div>
</div>
</body>
</html>
だから私の質問は、アクセスする方法であるか、それは親のコントローラからの指令のformControllerにアクセスすることは可能でしょうか?
ありがとうございました。
-Milan
正しいフィドルですか?どこでも '$ scope.myForm'への参照はありません。 – Langdon
HTMLには{{myForm}}があり、これは$ scope.myFormと同じです。 – MilMly
{{form}}もありますが、これはコントローラー内ではあるがディレクティブの外にあるフォームを参照します。これは期待どおりに動作しますが、myFormは親スコープにはなりません - appCtrlのスコープ:-( – MilMly