AngularJS $ scope在指令中编译控制器时未定义

时间:2013-11-26 22:28:58

标签: javascript angularjs angularjs-directive

我正在使用ant来构建/丑化我的AngularJS,每次我在指令中都有一个控制器时,我得到一个未定义的$ scope错误。代码示例如下:

app.directive('directive1',['$compile', '$http',function($compile, $http) {
    return {
        restrict: "A",
        controller : function($scope) {
            var posts = {};
            this.addPosts = function($scope, newPosts) {

                angular.extend(posts, newPosts);
                //$scope.$apply(function() {
                    $scope.posts = posts;
                //});
            };
        },
        link: function (scope, element, attrs) {
           scope.posts = {};
        }
    };
}]);

我的问题是,如何定义控制器的$范围,以便在编译时不会出现未定义的情况?

2 个答案:

答案 0 :(得分:1)

您希望将与指令定义相同的minifier / ulgifier安全方法应用于控制器。

所以你的控制器来自:

controller : function($scope) {

为:

controller: ['$scope',function($scope) {

uglifier将$scope重命名为'e'之类的短片,这对于大小很好但是Angular不知道要注入'e'的内容。

uglifier不会更改字符串。因此,上面的新代码让角度知道它应该将$ scope注入'e'(或uglifier给它的任何名称)。

答案 1 :(得分:0)

this.addPosts = function($scope, newPosts) {

什么叫这个功能?你为什么试图将$ scope传递给它?我认为你应该把它改成:

$scope.addPosts = function(newPosts) {

因为您想要获得第一个$ scope ...而不是您尝试传递给addPosts的任何范围。