0

我正在 使用函数参数跟踪 Dan Wahlin 隔离范围。我在这篇文章中有一些模棱两可的地方。由于该站点没有响应,因此我选择了堆栈溢出。我是 javascript/angular 世界的新手,非常欢迎详细回复。

  1. 当我使用datasource时,代码执行得很好。但是根据文章,如果我使用,customers那么我会得到异常无法读取未定义的属性推送。
  2. 当我在 chrome 中看到选择了自定义指令的范围时,我看不到datasourceand add,而是看到customersand addCustomer。为什么在隔离范围datasourceadd不可用?如果我看到 childscope,那么我可以在隔离绑定中看到 thedatasource和 the 。add这是什么意思?
  3. 控制器(在指令内定义)范围可以访问隔离范围吗?如何?
  4. 如何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>'
  };
 });

我想知道在这种情况下我是否遗漏了任何东西,或者这篇文章是无意的错误。

4

0 回答 0