当我尝试使用ngRepeat别名作为语法控制器作为语法时,我收到此错误https://code.angularjs.org/1.3.16/docs/error/ngRepeat/badident:
<li ng-repeat="item in vm.items | filter:vm.searchString as vm.collections">{{item}}</li>
Run Code Online (Sandbox Code Playgroud)
这是不允许的,或者我做错了什么?
好的,这真的让我烦恼.我有一个带隔离范围的指令,使用controllerAs语法和bindToController:
function exampleDirectiveFactory() {
var bindings = {
foo: '=',
bar: '@'
}
return {
bindToController: true,
controller : 'ExampleController',
controllerAs : 'vm',
scope : bindings,
template : 'foo = {{ vm.foo }}<br />bar = {{ vm.bar }}'
};
}
Run Code Online (Sandbox Code Playgroud)
假设有这样的用法:
<example foo="FOO" bar="BAR"></example>
Run Code Online (Sandbox Code Playgroud)
...我希望值vm.foo的值与foo属性的值双向绑定.相反,它是undefined.
值vm.bar等于barHTML元素的属性值,我期望.
当我尝试更改vm.bar使用过滤器的值时,不会继续更改.
当我将过滤后的值存储vm.bar到一个新变量时vm.baz,它按预期工作.
所以我的问题有两个部分:
A)为什么vm.foo使用时未定义的值'='?
B)为什么我不能改变vm.bar控制器范围内的值,即使该改变没有传播到HTML元素属性(它不应该,因为我正在使用'@')?
我如何看一个绑定到父控制器的变量?
function config($stateProvider) {
$stateProvider
.state('home', {
url: '/',
templateUrl: 'home.html',
controller: 'HomeController',
controllerAs: 'vm'
})
.state('home.child', {
url: '/child',
templateUrl: 'child.html',
controller: 'ChildController',
controllerAs: 'vm'
});
}
function HomeController($scope) {
this.title = 'Some Title';
}
function ChildController($scope) {
var vm = this;
$scope.$watch('vm.title', function(current, original) {
$log.info('title was %s', original);
$log.info('title is now %s', current);
});
}
Run Code Online (Sandbox Code Playgroud)
watch-Function无法识别父标题的更改.
谢谢!:)