【发布时间】:2016-08-18 02:50:36
【问题描述】:
我有以下标记:
<div ng-controller="DataController as vm">
<div ng-repeat="name in vm.users track by $index">
{{name}}
</div>
<form name="form" validation="vm.errors">
<input validator ng-model="vm.name" name="vm.name" placeholder="name" type="text" />
<a href="#" ng-click="vm.add(vm.name)">Add</a>
</form>
</div>
我有以下控制器:
function DataController($scope) {
var vm = this;
vm.name = "Mary";
vm.users = ["Alice", "Peter"];
vm.errors = 1;
vm.add = function(name) {
vm.errors++;
vm.users.push(name);
}
}
每次添加用户时,我都会增加错误值。
我需要在指令中观察这个变量,所以我有:
app.directive("validation", validation);
function validation() {
var validation = {
controller: ["$scope", controller],
restrict: "A",
scope: {
validation: "="
}
};
return validation;
function controller($scope) {
this.errors = $scope.validation;
}
}
app.directive("validator", validator);
function validator() {
var validator = {
link: link,
replace: false,
require: "^validation",
restrict: "A"
};
return validator;
function link(scope, element, attributes, controller) {
scope.$watch(function() {
return controller.errors;
}, function () {
console.log(controller.errors);
});
}
console.log 显示初始值但不显示新值:
https://jsfiddle.net/qb8o006h/2/
如果我将 vm.errors 更改为一个数组,添加值并观察它的长度,那么它可以正常工作: https://jsfiddle.net/nprx63qa/2/
为什么我的第一个例子不起作用?
【问题讨论】:
标签: angularjs