Javascript 隔离范围不为';I don’我认为它不应该这样工作

Javascript 隔离范围不为';I don’我认为它不应该这样工作,javascript,angularjs-directive,angularjs-scope,angularjs-controller,Javascript,Angularjs Directive,Angularjs Scope,Angularjs Controller,我对隔离作用域有一个基本的误解,我不知道它是什么 我有一个控制器和指令: .controller('MyCtrl', [ '$scope', function($scope) { $scope.zed = "ZZZZZ"; $scope.zz = function() { return "yep"; }; }]) .directive("myDirective", function() { r

我对隔离作用域有一个基本的误解,我不知道它是什么

我有一个控制器和指令:

.controller('MyCtrl', [
    '$scope',
    function($scope) {
        $scope.zed = "ZZZZZ";
        $scope.zz = function() {
            return "yep";
        };
    }])
.directive("myDirective", function() {
    return {
        restrict: "AE",
        controller: "MyCtrl",
        templateUrl: 'a/path/to/my_template.html',
        scope: {
            z: '@'
        }
    };
<div my-directive z="yabba"/>
以及模板:

<div>***{{z}} {{zz()}} ^^^ {{zed}} </div>
***{{z}}{{zz()}}^^{{zed}}
以及指令的使用:

.controller('MyCtrl', [
    '$scope',
    function($scope) {
        $scope.zed = "ZZZZZ";
        $scope.zz = function() {
            return "yep";
        };
    }])
.directive("myDirective", function() {
    return {
        restrict: "AE",
        controller: "MyCtrl",
        templateUrl: 'a/path/to/my_template.html',
        scope: {
            z: '@'
        }
    };
<div my-directive z="yabba"/>

当我运行此应用程序时,会为
z
显示'yabba'的值。我对此很在行。隔离范围使这成为可能。但是,模板直接进入
$scope
,能够运行函数并获取标量(
zed
zz
)。我不想那样。控制器需要访问
$scope
,因为我最终操作的模型必须从$scope数据组装而成

我的愿望是将指令限制为尽可能少的信息

我希望控制器可以使用
$scope
,但指令不能使用。我希望指令必须以独占方式从控制器获取其数据。我试图将
z
zed
添加到隔离范围中,但没有任何帮助


我该怎么做?或者,我的方法仅仅是与棱角分明和糟糕的方法格格不入吗?如果是这样,那很酷,请向我解释更好的方法。并且,请使用小词。

您将控制器包括在指令中,这是在冒险。只需从指令中删除这一行,它的行为将与您猜测的一样:controller:“MyCtrl”

这是一个乱七八糟的家伙。您可以看到,您的隔离作用域在注释掉该行后仍在正常工作。只需再次取消注释该行,并查看您现在如何访问控制器范围

.directive("myDirective", function() {
return {
    restrict: "AE",
    // controller: "MyCtrl", REMOVE THIS LINE!!!
    templateUrl: 'a/path/to/my_template.html',
    scope: {
        z: '@'
    }
};


顺便说一下,您的代码中没有任何外来信息。隔离作用域是与自定义指令一起使用的一个很好的特性。使用Angularjs 1+有很多方法。Angularjs 2.0发布时可能不是这种情况。在您的示例中,指令中不需要控制器。我很少包含控制器,而且我总是隔离作用域。祝你好运希望这能有所帮助。

感谢您的回复。但是我最终会在控制器中有一些肉——一个被监视的模型,这将是指令的数据源。当然也有一些状态标志和功能。指令将如何发现这些东西?