【发布时间】:2014-01-22 21:22:02
【问题描述】:
我是 Angular 的新手并试图了解高级指令 API - 我想使用指令元素属性在编译函数中重新创建指令模板。 但是当我没有模板集(或模板是空字符串)而不是访问隔离指令范围时,我访问父(控制器)范围。另外 - 这适用于 Angular 1.1 但不适用于 1.2
这里是 HTML:
<div class="container" ng-app="app" ng-controller="AppController">
<sandbox title="Attribute Title"></sandbox>
</div>
JavaScript:
var app = angular.module('app', [], function () {});
app.controller('AppController', function ($scope) {
$scope.title = "AppController title";
});
app.directive('sandbox', function ($log, $compile) {
return {
restrict: 'E',
scope: {
title: "@"
},
controller: function ($scope, $element, $attrs) {
$scope.title = "Directive Controller title";
},
template: '<h1>Template</h1>', // change it to: '' and Run, than change Angular to 1.2.x
compile: function (tElement, tAttrs) {
tElement.append('<h2> Title = {{ title }}</h2>');
}
}
});
当你运行它时,你会得到:
模板
Title = 属性标题
但是当您将模板更改为空字符串时,您会使用 Angular 1.2:
Title = AppController 标题
使用 Angular 1.1.1:
Title = 属性标题
我的问题:
为什么设置模板和未设置模板时访问范围会有所不同?
为什么 Angular 1.1 和 1.2 之间存在差异(错误?- 没有“模板”的指令和带有孤立作用域的指令访问控制器作用域而不是指令作用域)?
如何在编译函数中构建访问 Angular 1.2 中的隔离范围而不是父范围的模板?
为什么指令控制器函数不使用 $scope.title = "..." 更改 'title' - 但是在调试 'link' 函数中的 'scope' 参数时,'title' 值是 'Directive Controler Title'但它在内部(在哪里寻找它)绑定了孤立的范围“属性值”?
这里是 JSFiddle 玩:http://jsfiddle.net/yoorek/zQ66L/4/
【问题讨论】:
标签: angularjs