更改控制器内的$ scope

时间:2015-08-12 13:21:56

标签: javascript angularjs

我想将控制器中的$scope从包裹div更改为当前点击的对象。我的代码如下:

var blogApp = angular.module('blogApp', ['ngSanitize', 'ngRoute']);

blogApp.controller('blogPostsCtrl', function($scope, $http) {   
    $http.get('http://jsonplaceholder.typicode.com/posts').success(function(data) {
        $scope.posts = data;
        $scope.postsLoaded = 'article--loaded';
    });

    $scope.getPost = function(postID) {
        var currentPost = document.getElementById('post-'+postID);
        $scope.postsLoaded = 'article--loaded';

        $http.get('http://jsonplaceholder.typicode.com/posts/'+postID).success(function(data) {
            $scope.body = data.body;
            currentPost.insertAdjacentHTML('beforeend', '<div class="body body--hidden" id="body-'+postID+'">'+$scope.body+'</div>');

            var currentBody = document.getElementById('body-'+postID);
            setTimeout(function() { currentBody.className = currentBody.className + ' body--visible'; }, 1000); 
            currentPost.classname = 'article one-half desk-one-whole';
        });
    };
});

HTML:

<div class="site-wrapper">
    <div class="grid-wrapper" ng-controller="blogPostsCtrl">
        <article ng-repeat="post in posts" ng-class="postsLoaded" class="article one-half desk-one-whole" id="post-{{post.id}}" ng-click="getPost(post.id)">
            <header><h2>{{post.title}}</h2></header>
        </article>
    </div>
</div>

正如你所看到的,我在控制器内部使用了函数getPost,并且我使用$scope,但是它(应该是)设置为,就像我说的那样,全球包装。我怎么解决这个问题?请注意我是Angular的新手,所以我不知道它是否有效; - )

1 个答案:

答案 0 :(得分:0)

我同意@Matthew Green。你的问题有点困惑。但据我所知,你应该使用指令。 创建一个directive并为其分配自己的$ scope。

希望能帮助你。