如果使用隔离范围,则无法调用指令链接方法
Unable to call directive linked method if using isolated scope
嗨,有人可以向我解释一下我在这里缺少什么吗?
我创建了一个简单的测试指令属性,"link"。
没有隔离范围,我可以通过 ng-click
调用 link 中的方法
但是一旦我添加了一个独立的作用域,它就不起作用了。
<a test1 class="btn btn-default pull-right" form="PassedIn" ng-click="omg()">
<span class="glyphicon glyphicon-plus" data-tooltip="New" data-tooltip-placement="left"></span>
</a>
<a test2 class="btn btn-default pull-right" view-model="10" ng-click="omg2()">
<span class="glyphicon glyphicon-plus" data-tooltip="New" data-tooltip-placement="left"></span>
</a>
指令:
.directive('test1', function() {
return {
restrict: 'A',
scope: {
form: '=form'
},
link: function($scope, element, attrs) {
$scope.omg = function() {
alert($scope.form);
};
}
};
})
.directive('test2', function() {
return {
restrict: 'A',
link: function($scope, element, attrs) {
$scope.omg2 = function() {
alert('hello2');
};
}
};
});
http://plnkr.co/edit/CU96ieef4iNwWmccne4t?p=preview
我很确定它与范围有关,但有人可以解释一下吗?
还有为什么我的具有独立作用域的指令调用另一个指令的 link 中的方法(我使这两个方法同名)。
.directive('test1', function() {
return {
restrict: 'A',
scope: {
form: '=form'
},
link: function($scope, element, attrs) {
$scope.omg = function() {
alert($scope.form);
};
}
};
})
.directive('test2', function() {
return {
restrict: 'A',
link: function($scope, element, attrs) {
$scope.omg = function() {
alert('hello2');
};
}
};
});
http://plnkr.co/edit/IEiDeV9Es6zigGxxk67s?p=preview
谢谢,
凯文
当您指定一个独立的作用域时,该指令将获得一个仅供该指令使用的全新作用域。同样,当您不指定作用域时,将继承父作用域。
您编写 ng-click
的方式将只能访问父作用域中的方法(在您的情况下为 omg2
)。
为了正确处理点击事件,应该这样做:
.directive('test1', function () {
return {
restrict: 'A',
compile: function ($element, attr) {
return function customDirectiveClickHandler(scope, element) {
// Do standard setup here...
element.on('click', function (event) {
scope.$apply(function(){
// All click code goes here...
alert('hello2');
});
});
};
}
};
});
您还可以通过查看 source code.
了解 Angular 实际上如何处理 ng-click
(和其他事件)
嗨,有人可以向我解释一下我在这里缺少什么吗?
我创建了一个简单的测试指令属性,"link"。 没有隔离范围,我可以通过 ng-click
调用 link 中的方法但是一旦我添加了一个独立的作用域,它就不起作用了。
<a test1 class="btn btn-default pull-right" form="PassedIn" ng-click="omg()">
<span class="glyphicon glyphicon-plus" data-tooltip="New" data-tooltip-placement="left"></span>
</a>
<a test2 class="btn btn-default pull-right" view-model="10" ng-click="omg2()">
<span class="glyphicon glyphicon-plus" data-tooltip="New" data-tooltip-placement="left"></span>
</a>
指令:
.directive('test1', function() {
return {
restrict: 'A',
scope: {
form: '=form'
},
link: function($scope, element, attrs) {
$scope.omg = function() {
alert($scope.form);
};
}
};
})
.directive('test2', function() {
return {
restrict: 'A',
link: function($scope, element, attrs) {
$scope.omg2 = function() {
alert('hello2');
};
}
};
});
http://plnkr.co/edit/CU96ieef4iNwWmccne4t?p=preview
我很确定它与范围有关,但有人可以解释一下吗?
还有为什么我的具有独立作用域的指令调用另一个指令的 link 中的方法(我使这两个方法同名)。
.directive('test1', function() {
return {
restrict: 'A',
scope: {
form: '=form'
},
link: function($scope, element, attrs) {
$scope.omg = function() {
alert($scope.form);
};
}
};
})
.directive('test2', function() {
return {
restrict: 'A',
link: function($scope, element, attrs) {
$scope.omg = function() {
alert('hello2');
};
}
};
});
http://plnkr.co/edit/IEiDeV9Es6zigGxxk67s?p=preview
谢谢, 凯文
当您指定一个独立的作用域时,该指令将获得一个仅供该指令使用的全新作用域。同样,当您不指定作用域时,将继承父作用域。
您编写 ng-click
的方式将只能访问父作用域中的方法(在您的情况下为 omg2
)。
为了正确处理点击事件,应该这样做:
.directive('test1', function () {
return {
restrict: 'A',
compile: function ($element, attr) {
return function customDirectiveClickHandler(scope, element) {
// Do standard setup here...
element.on('click', function (event) {
scope.$apply(function(){
// All click code goes here...
alert('hello2');
});
});
};
}
};
});
您还可以通过查看 source code.
了解 Angular 实际上如何处理ng-click
(和其他事件)