2

私は AngularJS を使用して最初の Web サイトに取り組んでいます。html タグで ng-app を宣言すると、アプリは正常に動作します。ただし、コントローラーとフィルターを使用してモジュールを作成できるように、ng-app ディレクティブに名前を割り当てようとすると、データ バインディングが機能しなくなります。

ここに私の作業コードがあります:

<!doctype html>
<html data-ng-app>
    <head>
        <meta charset="utf-8">
        <title>Twittiment</title>
        <link href="search_client.css" type="text/css" rel="stylesheet" />
        <link href="tweet.css" type="text/css" rel="stylesheet" />
        <script src="jquery.min.js"></script>
        <script src="search_client.js"></script>
        <script src="/js/highcharts.js"></script>
    </head>

    <body data-ng-controller="TweetCtrl">
        <div id="main">
            <div id="search_box">
                <h1 id="title">Twitter Sentiment Analysis</h1>

                <input name="search_terms" autofocus="autofocus" data-ng-model="query" />
                <button id="search_button" data-ng-click="search()">Search</button>
                <div id="data"></div>I can add:{{1+3}}</div>
            <div id="search_results">Search tweets:
                <input name="filter" data-ng-model="text" /><span>Displaying {{(tweets|filter:text).length}} of {{tweets.length}} tweets</span>

                <div class="tweet" data-ng-repeat="tweet in tweets | filter:text">
                    <div class="tweet_left">
                        <div class="tweet_image"> <a href="https://twitter.com/{{tweet.user.screen_name}}">
                        <img src="{{tweet.user.profile_image_url}}">
                    </a>

                        </div>
                    </div>
                    <div class="tweet_right">
                        <div class="tweet_triangle"></div>
                        <div class="tweet_row">
                            <div class="tweet_username"> <a href="https://twitter.com/{{tweet.user.screen_name}}" target="search">{{tweet.user.screen_name}}</a>
 <span class="tweet_name">{{tweet.user.name}}</span>
 <span class="delete_tweet">Mark as irrelevant</span>
                                <input class="close_button" type="image" src="/xmark.jpg" alt="submit" ng-click="delete($index)">
                            </div>
                        </div>
                        <div class="tweet_row">
                            <div class="tweet_text">{{tweet.text}}</div>
                        </div>
                        <div class="tweet_row">
                            <div class="tweet_timestamp">
                                <img class="stream_bluebird" src="bird_16_blue.png"> <span class="retweets">{{tweet.retweet_count}} retweets</span>
 <a href="http://twitter.com/{{tweet.user.screen_name}}/status/{{tweet.id}}" target="search" class="tweet_time_link">{{tweet.created_at}}</a>

                                <img src="reply.png" class="imageof_reply"> <a href="http://twitter.com/intent/tweet?in_reply_to={{tweet.id}}" target="search">Reply</a>

                                <img src="retweet.png" class="imageof_retweet"> <a href="http://twitter.com/intent/retweet?tweet_id={{tweet.id}}" target="search">Retweet</a>

                                <img src="favorite.png" class="imageof_favorite"> <a href="http://twitter.com/intent/favorite?tweet_id={{tweet.id}}" target="search">Favorite</a>

                            </div>
                        </div>
                    </div>
                    <div class="sentiment" data-ng-controller="RatingCtrl">
                        <div class="rating" data-ng-model="tweet.polarity">{{tweet.polarity}}</div>
                        <button data-ng-click="changeRating('Positive')">
                            <img class="positive" src="/thumbs-up-button.jpg">
                        </button>
                        <button data-ng-click="changeRating('Neutral')">
                            <img class="neutral" src="/thumbs-sideways-button.jpg">
                        </button>
                        <button data-ng-click="changeRating('Negative')">
                            <img class="negative" src="/thumbs-down-button.jpg">
                        </button>
                    </div>
                </div>
            </div>
        </div>
        <div class="total">
             <h2 id="totalTitle"></h2>

            <div>{{tweets.length}}</div>
            <div id="totalPos"></div>
            <div id="totalNeut"></div>
            <div id="totalNeg"></div>
        </div>
        <div id="container" style="width:40%; height:400px;"></div>
        <script src="/ang-Twittiment/app/lib/angular/angular.js"></script>
    </body>
</html>

JS:

function TweetCtrl($scope, $http) {
    $scope.search = function () {
        $http({
            method: 'GET',
            url: 'http://localhost:8080/search_server.php?q=' + $scope.query
        }).success(function (data) {
            $scope.tweets = data;
        })
            .error(function (data) {
            alert("search error")
        });
    };
    $scope.delete = function (idx) {
        $scope.tweets.splice(idx, 1);
    };
}

function RatingCtrl($scope) {
    $scope.changeRating = function (rating) {
        $scope.tweet.polarity = rating;
    }
}

そして、動作しないコードは次のとおりです。

<html data-ng-app="myApp">

JS:

var myAppModule = angular.module('myApp', []);

myAppModule.controller('TweetCtrl', function ($scope, $http) {
    $scope.search = function () {
        $http({
            method: 'GET',
            url: 'http://localhost:8080/search_server.php?q=' + $scope.query
        }).success(function (data) {
            $scope.tweets = data;
        })
            .error(function (data) {
            alert("search error")
        });
    };
    $scope.delete = function (idx) {
        var person_to_delete = $scope.tweets[idx];

        $scope.tweets.splice(idx, 1);
    };
});

myAppModule.controller('RatingCtrl', function ($scope) {
    $scope.changeRating = function (rating) {
        $scope.tweet.polarity = rating;
    }
});

ng-app ディレクティブに名前を割り当てるたびにデータバインディングが停止する理由を誰か教えてもらえますか? モジュールを構成する際に抜けているステップはありますか? さらに情報が必要な場合はお知らせください。

4

2 に答える 2

4

実際には、angular.moduleステートメントの前にangular.jsファイル参照を配置する必要があるため、angularを識別できます。それ以外の場合は、angularが定義されていないことを示すjavascriptエラーを確認します

于 2013-11-19T09:59:27.390 に答える