可以在具有独立范围的angularjs指令中互换使用本地范围属性和传入的属性值

时间:2018-08-02 10:56:04

标签: angularjs angularjs-directive isolated-scope

我正在关注Dan Wahlin isolate scope with function parameters。我在这篇文章中有一些含糊之处。由于该站点没有响应,因此我选择了堆栈溢出。我是javascript / angular世界的新手,欢迎提供详细信息。

  1. 当我使用datasource时,代码执行良好。但是根据这篇文章,如果我使用customers,则会得到无法读取未定义属性推送的异常。
  2. 当我在chrome中选择了自定义指令的范围时,看不到datasourceadd,而是看到了customersaddCustomer。为什么datasourceadd在隔离范围中不可用?如果我看到了子范围,那么我可以在隔离绑定中看到datasourceadd。这是什么意思?
  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 个答案:

没有答案