【发布时间】:2016-03-05 22:45:08
【问题描述】:
我刚开始使用 AngularJs,遇到了一个问题,这可能是由于没有正确理解指令/控制器/隔离范围造成的。我正在尝试找到一种方法来从 html 将指令属性设置为 true/false,并保持控制器上的属性与该属性一致。我正在处理的是:
- 具有
signUpEnabled属性的控制器 (LoginController) -
返回此的指令 (
myLogin):var directive = { bindToController: true, controller: 'LoginController', controllerAs: 'loginVm', templateUrl: 'login/my-login.directive.html', restrict: 'E', scope: { signUpEnabled: '=' } }; -
指令使用的HTML如下:
<my-login sign-up-enabled="true">
我收到错误:Error: [$compile:nonassign] Expression 'true' used with directive 'frintLogin' is non-assignable!
当我在 HTML 中将 signUpEnabled 设置为 false 时,它可以正常工作 - 可能是因为这就是控制器中属性被初始化的原因。我是在解决这个问题,还是我错过了什么(比如在指令的链接功能中观看signUpEnabled?)
[编辑] 感谢您的帮助。不确定这是否是一种做事的好方法,但我想我可以通过将此链接函数添加到指令中来获得我想要的行为(在将隔离范围上的signUpEnabled 的绑定更改为'@' 之后):
function link(scope, element, attrs, ctrl) {
$timeout(function() {
ctrl.signUpEnabled = scope.$eval(attrs.signUpEnabled)
}); ;
}
【问题讨论】:
-
按照你写的方式,它在你的指令之外的范围内寻找一个名为“true”的属性。请参阅文档中有关“范围”的部分:docs.angularjs.org/api/ng/service/…
标签: javascript angularjs angularjs-directive angularjs-controller