AngularJS指令:范围

时间:2015-05-25 12:05:07

标签: angularjs scope directive

我有以下示例:

HTML:

<body ng-controller="MainCtrl">
    <p>Hello {{name}}!</p>
    <p>Result is {{result}}!</p>
    <output-content data="name"></output-content>
</body>

JavaScript的:

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
    $scope.name = 'World';
    $scope.result = "no";

    $scope.changeLabel = function() {
        $scope.result = 'yes';
    }
});

app.directive('outputContent', function() {
    return {
        restrict: 'E',
        replace: true,
        templateUrl: 'outputContent.html',
        scope: {
            data: '=',
            result: '='
        },
        controller: 'MainCtrl'
    };

});

outpuContent.html:

<div>
    {{data}}
    <button ng-click="changeLabel()">Change</button>
</div>

Plunker是:http://plnkr.co/edit/uzSrGcyQLeRNEIH7IXBf

当我点击“更改”按钮时,我希望结果为“是”。

它不起作用。

您能否请您解释如何编写指令?

问候。

3 个答案:

答案 0 :(得分:3)

您可以在指令范围内定义变量,但不要传递它。刚过去 &#34;导致&#34;成指令。 E.g:

<output-content data="name" result="result"></output-content>

我把你的傻瓜分开了:http://plnkr.co/edit/12FXjUsVdPXhPIQ1mlHt?p=preview

希望它有所帮助。

答案 1 :(得分:2)

在指令中,删除范围。现在像这样......这将是有效的..

app.directive('outputContent', function() {
  return {
    restrict: 'E',
    replace: true,
    templateUrl: 'outputContent.html',
    controller: 'MainCtrl'
  };

});

答案 2 :(得分:1)

不需要范围。请删除范围。

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.name = 'World';
  $scope.result = "no";

  $scope.changeLabel = function() {
    $scope.result = 'oh yeah';
  }
});

app.directive('outputContent', function() {
  return {
    restrict: 'E',
    replace: true,
    templateUrl: 'outputContent.html',
      controller: 'MainCtrl'
  };

});