Может ли свойство локальной области видимости и переданное значение атрибута использоваться взаимозаменяемо в директивах angularjs с изолированной областью действия

Я слежу за областью изоляции Дэна Валина с параметрами функции. У меня есть пара двусмысленностей в этой статье. Поскольку на этом сайте нет ответа, я выбрал переполнение стека. Я новичок в мире javascript/angular, ответ в деталях приветствуется.

  1. Когда я использую datasourceкод выполняется хорошо. Но согласно статье, если я использую customers тогда я получаю исключение не могу прочитать свойство push неопределенного.
  2. Когда я вижу область в chrome с выбранной пользовательской директивой, я не вижу datasource и addвместо этого я вижу customers а также addCustomer, Почему datasource а также add недоступно в изолированном объеме? Если я увижу детскую прицел, то смогу увидеть datasource и 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>'
  };
 });

Я хочу знать, пропускаю ли я что-нибудь в этом случае, или статья является непреднамеренной ошибкой.

0 ответов

Другие вопросы по тегам