【发布时间】:2016-02-22 12:29:30
【问题描述】:
正如标题所说,我试图从指令和我的控制器更改范围变量。但它不能改变控制器/指令的值,这里是jsfiddle
如果您单击Change 按钮,它将更改控制器的两个范围变量。
然后当单击changed from controller 按钮(现在是指令)时,它将更改drop 变量但不会更改select 变量并且Change 按钮无法再次更改该变量。
我也尝试按照here 的描述传递变量,但没有 成功。
指令:
app.directive("drop", [function() {
return {
scope: true,
restrict: 'A',
link: function(scope, element, attrs) {
return element.bind('click', function(e) {
scope.drop = "changed to drop";
scope.select = "changed to select";
scope.$apply();
});
}
};
}]);
控制器:
function myController($scope) {
$scope.drop = "Initial value";
$scope.select = "Initial Value";
$scope.selection = function() {
$scope.drop = "changed from controller";
$scope.select = "changed from controller";
};
}
编辑:
更多测试表明,当改变指令中的范围变量时,控制器不能再改变它了..
【问题讨论】:
-
您使用
scope: true,它将创建一个子范围,该子范围在原型上继承自控制器范围。控制器作用域的变化将反映在子作用域中,而不是相反 -
@devqon 是的,删除范围:true 解决了它,但在我的本地项目中,我正在准确地镜像 jsfiddle 中的内容,一旦单击指令事件,它将无法工作......