我正在 使用函数参数跟踪 Dan Wahlin 隔离范围。我在这篇文章中有一些模棱两可的地方。由于该站点没有响应,因此我选择了堆栈溢出。我是 javascript/angular 世界的新手,非常欢迎详细回复。
- 当我使用
datasource
时,代码执行得很好。但是根据文章,如果我使用,customers
那么我会得到异常无法读取未定义的属性推送。 - 当我在 chrome 中看到选择了自定义指令的范围时,我看不到
datasource
andadd
,而是看到customers
andaddCustomer
。为什么在隔离范围datasource
内add
不可用?如果我看到 childscope,那么我可以在隔离绑定中看到 thedatasource
和 the 。add
这是什么意思? - 控制器(在指令内定义)范围可以访问隔离范围吗?如何?
- 如何
controllerAs
在指令控制器中使用。
这是源代码。
var app=angular.module('customermodule', []);
app.controller('CustomersController', ['$scope', function ($scope) {
var counter = 0;
$scope.customer = {
name: 'David',
street: '1234 Anywhere St.'
};
$scope.customers = [];
$scope.addCustomer = function (name) {
counter++;
$scope.customers.push({
name: (name) ? name : 'New Customer' + counter,
street: counter + ' Cedar Point St.'
});
};
$scope.changeData = function () {
counter++;
$scope.customer = {
name: 'James',
street: counter + ' Cedar Point St.'
};
};
}]);
app.directive('isolatedScopeWithController', function () {
return {
restrict: 'EA',
scope: {
datasource: '=',
add: '&',
},
controller: function ($scope) {
$scope.addCustomer = function () {
//Call external scope's function
var name = 'New Customer Added by Directive';
$scope.add({ name: name });
//I get exception here if i use customers here. Instead If I use datasource, it works well.
$scope.customers.push({
name: name
});
};
},
template: '<button ng-click="addCustomer()">Add Customer</button>
<ul>' +
'<li ng-repeat="cust in customers">{{ cust.name }}</li></ul>'
};
});
我想知道在这种情况下我是否遗漏了任何东西,或者这篇文章是无意的错误。