我需要在指令的回调函数内修改一个根作用域属性。但是,这个指令是在由switch指令创建的内部作用域中。
HTML
<div ng-app="app" ng-controller='AppController'>
<p>Selected: {{ selected }}</p>
<div ng-switch on="selected">
<div ng-switch-default>
<p>Item: {{ selected }}</p>
<custom-tag selected-item="selected" />
</div>
<div ng-switch-when="New value">
<p>Worked</p>
</div>
</div>
</div>
JavaScript
angular.module('app', [])
.directive("customTag", [function () {
return {
restrict: "E",
replace: true,
template: "<input type='button' value='Click me' />",
link: function (scope, element, attrs) {
element.bind('click', function () {
scope[attrs.selectedItem] = "New value";
scope.$apply();
});
}
};
}]);
function AppController($scope) {
$scope.selected = 'Old value';
}
Fiddle: http://jsfiddle.net/nJ7FQ/
我的目标是能够在选择区域显示“New value”。 我应该如何实现我的目标?我做错了什么? 此外,由于我正在尝试制作一个组件。有没有一种方法可以使用隔离作用域来完成相同的操作?
scope:'='
会使scope
未定义。 - dopatramanlink
;这个替代方案与 shaunhusain 的完全相同,只是使用了controller
,但不起作用。可能是因为隔离作用域仅在link
函数设置时才设置好,而不是在controller
函数中。 - Nate Anderson