我已设置plunker来证明此问题。单击Bob按钮不起作用。我所期望的是,指令元素的子元素将具有相同的孤立范围。我是否必须将子元素移动到指令的模板属性中?
答案 0 :(得分:1)
我会定义一些对象pass
。使用方法pass
和标题:
setDirectiveTitle
演示 Plunker
<强> JS 强>
angular.module("myApp", [])
.directive("myScopedDirective", function() {
return {
scope: {
pass: '=',
preffix: "@msdTitle"
},
link: function($scope, $element, $attributes) {
$scope.pass.setDirectiveTitle = function(title) {
$scope.pass.title = $scope.preffix + title;
}
}
};
})
.controller("AppController", ["$scope", function($scope) {
$scope.passVal = {};
$scope.setAppTitle = function(title) {
$scope.passVal.title = title;
};
}]);
<强> HTML 强>
<div ng-controller="AppController">
<h2>{{title}}</h2>
<button ng-click="setAppTitle('App 2.0')">Upgrade Me!</button>
<div my-scoped-directive pass="passVal" msd-title="I'm a directive inside the app: {{passVal.title}}">
<h2>{{passVal.title}}</h2>
<button ng-click="passVal.setDirectiveTitle('Bob')" >Bob It!</button>
</div>
</div>
答案 1 :(得分:0)
问题是没有编译,你必须使用transclusion才能在指令内编译html。 http://plnkr.co/edit/hGKeTqqU62Na0MWPvBIZ?p=preview
或者你可以简单地传递一个模板: http://plnkr.co/edit/ZYhTdlwSDp0L3jjErOQt?p=preview
但是在这种情况下你不能使用范围属性绑定。因为在父作用域的第二次更新时,第三次单击子项将不会按预期更新。 您必须以不同方式传播数据。