与指令'ngIntroOptions'一起使用的ng-intro表达式'undefined'是不可赋值的

时间:2016-02-02 15:12:54

标签: javascript angularjs intro.js

我正在尝试设置angular-intro

到目前为止,我已完成以下工作:

HTML:

        <div class="hbox hbox-auto-xs hbox-auto-sm" ng-controller="ClientDashboardController">

        <div class="row" ng-intro-options="IntroOptions" ng-intro-autostart="true">
            <div class="col-lg-5 col-md-12" id="step1">
            </div>
        </div>
    </div>

在我的ClientDashboardController中,我有以下内容:

    $scope.IntroOptions = {
    steps:[
        {
            element: '#step1',
            intro: 'More features, more fun.',
            position: 'left'
        },
        {
            element: '#step2',
            intro: "Another step.",
            position: 'bottom'
        },
    ],
    showStepNumbers: false,
    exitOnOverlayClick: true,
    exitOnEsc:true,
    nextLabel: '<strong>NEXT!</strong>',
    prevLabel: '<span style="color:green">Previous</span>',
    skipLabel: 'Exit',
    doneLabel: 'Thanks'
};

然而,在我的浏览器中,我得到以下两个错误:

    Error: [$compile:nonassign] Expression 'undefined' used with directive 'ngIntroOptions' is non-assignable!
http://errors.angularjs.org/1.3.14/$compile/nonassign?p0=undefined&p1=ngIntroOptions
    at angular.js:63
    at parentSet (angular.js:7661)
    at parentValueWatch (angular.js:7674)
    at Object.regularInterceptedExpression (angular.js:12852)
    at Scope.$digest (angular.js:14235)
    at angular.js:14440
    at completeOutstandingRequest (angular.js:4905)
    at angular.js:5285

TypeError: c.ngIntroMethod is not a function
at ng-intro.js:2
at angular.js:16223
at completeOutstandingRequest (angular.js:4905)
at angular.js:5285

谁能告诉我我做错了什么? :S

1 个答案:

答案 0 :(得分:1)

以下是ngIntro文档的工作示例。检查项目中是否有问题。

&#13;
&#13;
var app = angular.module('myApp', ['angular-intro']);

app.controller('MyController', function ($scope) {

    $scope.CompletedEvent = function (scope) {
        console.log("Completed Event called");
    };

    $scope.ExitEvent = function (scope) {
        console.log("Exit Event called");
    };

    $scope.ChangeEvent = function (targetElement, scope) {
        console.log("Change Event called");
        console.log(targetElement);  //The target element
        console.log(this);  //The IntroJS object
    };

    $scope.BeforeChangeEvent = function (targetElement, scope) {
        console.log("Before Change Event called");
        console.log(targetElement);
    };

    $scope.AfterChangeEvent = function (targetElement, scope) {
        console.log("After Change Event called");
        console.log(targetElement);
    };

    $scope.IntroOptions = {
        steps:[
        {
            element: document.querySelector('#step1'),
            intro: "This is the first tooltip."
        },
        {
            element: document.querySelectorAll('#step2')[0],
            intro: "<strong>You</strong> can also <em>include</em> HTML",
            position: 'right'
        },
        {
            element: '#step3',
            intro: 'More features, more fun.',
            position: 'left'
        },
        {
            element: '#step4',
            intro: "Another step.",
            position: 'bottom'
        },
        {
            element: '#step5',
            intro: 'Get it, use it.'
        }
        ],
        showStepNumbers: false,
        exitOnOverlayClick: true,
        exitOnEsc:true,
        nextLabel: '<strong>NEXT!</strong>',
        prevLabel: '<span style="color:green">Previous</span>',
        skipLabel: 'Exit',
        doneLabel: 'Thanks'
    };

    $scope.ShouldAutoStart = true;

});
&#13;
<!DOCTYPE html>
<html ng-app="myApp">

<head>
  <meta charset="utf-8" />
  <link rel="stylesheet" href="style.css" />
  <link rel="stylesheet" href="https://rawgit.com/usablica/intro.js/master/minified/introjs.min.css" />
  <script type="text/javascript" src="//rawgit.com/usablica/intro.js/master/minified/intro.min.js"></script>
  <script data-require="angular.js@1.4.x" src="https://code.angularjs.org/1.4.8/angular.js" data-semver="1.4.8"></script>
  <script src="//rawgit.com/mendhak/angular-intro.js/master/build/angular-intro.min.js"></script>
  <script type="text/javascript" src="app.js"></script>

  <script src="app.js"></script>
</head>

<body ng-controller="MyController">
  <div class="container-narrow">

<div ng-intro-options="IntroOptions" ng-intro-method="CallMe" ng-intro-oncomplete="CompletedEvent" ng-intro-onexit="ExitEvent" ng-intro-onchange="ChangeEvent" ng-intro-onbeforechange="BeforeChangeEvent" ng-intro-onafterchange="AfterChangeEvent" ng-intro-autostart="ShouldAutoStart">

  <div class="masthead">
    <ul id="step5" class="nav nav-pills pull-right">
      <li><a href="https://github.com/mendhak/angular-intro.js/tree/master/build"><i class='icon-black icon-download-alt'></i> Download</a></li>
      <li><a href="https://github.com/mendhak/angular-intro.js">Github</a></li>
    </ul>
    <h3 class="muted">ng-intro</h3>
  </div>

  <div class="jumbotron">
    <h1 id="step1">Angular Intro.js</h1>
    <p id="step4" class="lead">AngularJS directives for <a href="http://usablica.github.io/intro.js/" onclick="window.open(this.href);return false;">intro.js</a></p>
    <a class="btn btn-large btn-success" ng-click="CallMe();">Demo</a>
    <a class="btn btn-large btn-success" ng-click="CallMe(3);">Start at step 3</a>
  </div>

  <div class="row-fluid marketing">
    <div id="step2" class="span6">
      <h4>Setup</h4>
      <p>Include the JS and CSS files for intro.js, and angular-intro.min.js. Add the module <code>angular-intro</code> to your app declaration.</p>

      <h4>Options</h4>
      <p>Set the options like so: <code>ng-intro-options="IntroOptions"</code>. Define <code>$scope.IntroOptions</code> in your controller. The format is exactly the same as the <a href="https://github.com/usablica/intro.js#options">original</a>.</p>

      <h4>Method name</h4>
      <p>Pick a method name, <code>ng-intro-method="CallMe"</code>. You can invoke the intro from elsewhere by calling <code>CallMe();</code>. You can also specify a step number using <code>CallMe(3);</code>. To autostart, use <code>ng-intro-autostart="true"</code></p>

      <h4>Callbacks</h4>
      <p>You can get callbacks to your controller using the <code>ng-intro-oncomplete</code>, <code>ng-intro-onexit</code>, <code>ng-intro-onchange</code>, <code>ng-intro-onbeforechange</code> and <code>ng-intro-onafterchange</code> directives.</p>

      <p>See <a href="https://github.com/mendhak/angular-intro.js/blob/master/example/index.html">index.html</a> and <a href="https://github.com/mendhak/angular-intro.js/blob/master/example/app.js">app.js</a> for usage code.</p>
    </div>

    <div id="step3" class="span6">
      <h4><a href="https://github.com/mendhak/angular-intro.js/tree/master/example">Example</a></h4>
      <p>Set the options and method name:
      </p>
      <p>Options in the controller</p>
      <p>Call it either way</p>
    </div>
  </div>

  <hr>

</div>
  </div>


</body>

</html>
&#13;
&#13;
&#13;