Javascript 控制器,指令控制器,编译,链接-工作流(编译功能不工作)

Javascript 控制器,指令控制器,编译,链接-工作流(编译功能不工作),javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,在下面的程序中,函数应该如下->控制器,指令控制器,编译,链接。但是,Compile函数中似乎有一些错误 <html> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.min.js" ></script> </head> <body ng-app="myApp" ng-controller="myCtr

在下面的程序中,函数应该如下->控制器,指令控制器,编译,链接。但是,Compile函数中似乎有一些错误

<html>
<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.min.js" ></script> 
</head>
<body ng-app="myApp" ng-controller="myCtrl"> 
<people></people>
<script>
//1 module declaration
var app = angular.module("myApp",[]);
//3 controller declaration
app.controller('myCtrl',function($scope){
    //before going to directive 
    $scope.name = "One";
});
//5 directives declaration
app.directive('people',function(){
    return{
        restrict: 'E',
        template: '<div>{{name}}</div>',
        //before compilation
        controller: function($scope, $element){
            $scope.name = $scope.name + "Two"; 
        },
        compile: function($scope, $element){
            $scope.name = $scope.name + "Three"; 
        },
        //after compilation
        link: function($scope, el, attr){
            $scope.name = $scope.name + "Four"
        }
    }
});
</script> 
</body> 
</html>
结果

OneTwo
但是,如果我从指令中删除编译函数,我会得到以下结果:

 OneTwoFour
compile函数没有在$scope.name中呈现“三”有什么问题

从以下文件中获取的片段:

仅当未定义compile属性时,才使用link属性。要在编译前和编译后执行某些操作,请在编译函数中返回以下内容:

function compile(tElement, tAttrs, transclude) {
    return {
        pre: function preLink(scope, iElement, iAttrs, controller) { ... },
        post: function postLink(scope, iElement, iAttrs, controller) { ... }
    }
}
如果不使用preLink或postLink,中的$scope变量在编译函数中不可用

function compile(tElement, tAttrs, transclude) { ... }
  • tElement-模板元素-声明指令的元素。只对元素和子元素进行模板转换是安全的

  • tAttrs-模板属性-所有指令编译函数共享的在此元素上声明的属性的规范化列表

  • transclude-[不推荐!]一个transclude链接函数:函数(作用域,克隆链接fn)


这里有一个例子来说明:

希望这在你的代码中不应该是个问题,但是这里的拼写错误
restric:'E',
不,对不起,是打字错误。下面的答案有用吗?如果您需要任何进一步的信息,请告诉我。我希望看到“三”由编译函数打印(或通过其中的pre或post打印)。对于指令->控制器和指令->链接,仍然不清楚这个编译的位置。@Peterson我在下面创建了一个plnkr。
function compile(tElement, tAttrs, transclude) { ... }