我遵循这本关于指令的书,并决定在只读范围上尝试他们的代码。但是,我得到奇怪的结果。角度只读范围很奇怪
发生的事情是:
- 在开始使用#appTitle应该读的 “Hello World” 和#newDirTitle应该读的 “Hello World的指令”(它doesnt)
- 在#newAppTitle,#appTitle用户点击后将改变到App 2.0和#newDirTitle应改为 “应用程序2.0的指令”(它不)
- 当点击#newDirTitle,只有该指令的标题必须改变(它doesnt)
我也注意到了下来摆弄角版本1.1.1解决了这个问题。虽然我确实接受一些小的版本更改可能会影响整体行为,但我不明白为什么,例如,案例3停止工作或为什么在案例1中标题仍然读取原始应用标题(“Hello World”)值而不是scoped标题只读值(“Hello World指令”)。谁能解释一下吗?
下面是代码:
HTML
<div ng-app="demoApp">
<div ng-controller="AppController">
<div ng-init="title = 'Hello World'">
<h2 id="appTitle">{{ title }}</h2>
<button id="newAppTitle" ng-click="setAppTitle('App 2.0')">Upgrade Me!</button>
<div my-scoped-directive="" msd-title="Directive of {{ title }}">
<h4 id="directiveTitle">{{ title }}</h4>
<button id="newDirTitle" ng-click="setDirectiveTitle('bob')">Bob it!</button>
</div>
</div>
</div>
</div>
JS
var demoApp = angular.module('demoApp', []);
demoApp.controller("AppController", function($scope) {
$scope.setAppTitle = function(t) {
$scope.title = t;
};
});
demoApp.directive("myScopedDirective", function() {
return {
scope: {
title: '@msdTitle'
},
link: function(scope, element, attrs) {
scope.setDirectiveTitle = function(t) {
scope.title = t;
};
}
};
});
的jsfiddle
哇哦..这整个作用域业务现在已经完全改变了。所以基本上你所说的是,任何在指令下执行函数的ng-click现在总是绑定到该指令所在的控制器上?那么如何用ng-click来执行指令的功能呢? – AVK
主HTML页面中的指令可以创建从父作用域继承的子作用域,最终创建到$ rootScope。所以说,任何在指令下执行函数的ng单击都绑定到元素的当前作用域(可以被继承,或者它可能是由指令创建的子作用域),这是更正确的。您可以通过在元素当前范围(或任何父范围,因为它继承范围)上定义点击处理程序来执行ng-click。 – pixelbits
要处理指令的隔离范围内的点击事件,您要么绑定到javascript'click'事件(不使用ng-click),要么在您的指令模板中声明一个按钮(不要声明它在主HTML中)。 – pixelbits