私のセットアップを説明した後、私の質問は以下の太字です。
index.html
<div ng-controller="MyCtrl">
<user-picker placeholder="Type a name..."></user-picker>
</div>
設定:
var app = angular.module('app', ['app.directives', 'app.controllers']);
var directives = angular.module('app.directives', []);
var ctrls = angular.module('app.controllers', []);
コントローラ:
ctrls.controller('MyCtrl', function($scope) {
$scope.foo = 'this is a foo';
});
指令:
directives.directive('userPicker', function() {
return {
restrict: 'E',
replace: true,
scope: {
placeholder: '@'
},
templateUrl: 'file.html',
link: function postLink($scope, ele, attrs) {
console.log($scope);
console.log('[ng] Scope is: ');
console.log($scope.placeholder);
console.log($scope.$parent.foo);
}
});
file.html (ディレクティブ):
<span>
<input placeholder="{{placeholder}}" type="text">
</span>
したがって、私が最終的にやりたいことは、一般的に機能しています:
<span placeholder="Type a name...">
<input placeholder="Type a name..." type="text">
</span>
placeholder
属性は正しく解決されています。
これはこれを達成する正しい方法ですか?属性は 2 つの場所で終了することに注意してください。
この奇妙な動作の理由:
次に、 の結果に困惑していますconsole.log($scope)
。コンソール出力はplaceholder
、オブジェクトに正確に設定された属性を明らかにし$scope
ます。ただし、それでも、次のconsole.log($scope.placeholder)
ステートメントは「未定義」を返します。コンソール出力が属性が設定されていることを明確に示している場合、これはどのように可能ですか?
私の目標は次のとおりです。
placeholder
属性を親タグから子タグに移動またはコピーします<input>
。- リンク関数内からテンプレート スコープにアクセスできます。
MyCtrl
このディレクティブが含まれる親コントローラーを参照します。
上記の奇妙な動作に遭遇するまで、私はほとんどそこにいました。どんな考えでも大歓迎です。