如何在不调用$ stateChangeSuccess的情况下更改状态

时间:2015-09-04 05:05:25

标签: javascript angularjs angular-ui-router

我正在尝试更改网址而不重新加载$stateChangeSuccess。当元素存在时,它应该改变状态并滚动到元素。我能够滚动但无法改变状态。抱歉我的英语不好。

$rootScope.$on('$stateChangeStart', 
  function(event, newUrl, oldUrl, fromState, fromParams) {

    var l = ($location.$$path).split("/");
    l.shift();
    var step = l[1];

    if (step != "step4") return

    var module = l[2];

    if (newUrl.data.elementExists(module)) {

        var el = document.getElementById("SECTION" + module.hashCode());
        ZCScrollComponents.scrollTo(ZCDocumentationContainer, el.offsetTop, 300, null);

        event.preventDefault();
        $state.go($location.$$path)
        return false
    }
})

1 个答案:

答案 0 :(得分:0)

Package com.example.administrator.mosbeau; import android.app.Fragment; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * Created by Administrator on 9/1/2015. */ public class LoginFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.loginlayout, container, false); } }

有一个文档

http://angular-ui.github.io/ui-router/site/#/api/ui.router.state。$状态

我们可以阅读选项对象及其设置 <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:fillViewport="false"> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView4" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:src="@drawable/logo" android:maxHeight="54dp" android:maxWidth="322dp" android:layout_marginTop="20dp" android:layout_marginLeft="100dp" android:layout_marginRight="100dp" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView5" android:layout_below="@+id/imageView4" android:layout_centerHorizontal="true" android:src="@drawable/lock" android:layout_marginLeft="150dp" android:layout_marginRight="150dp" android:layout_marginTop="-60dp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/txtEmail" android:layout_below="@+id/imageView5" android:layout_centerHorizontal="true" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:hint="Email" android:background="#ffeeeeee" android:padding="10dp" android:layout_marginTop="-30dp" android:textColor="#ff6d6e71" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" android:ems="10" android:id="@+id/txtPassword" android:layout_below="@+id/txtEmail" android:layout_centerHorizontal="true" android:layout_marginLeft="30dp" android:layout_marginTop="10dp" android:layout_marginRight="30dp" android:textColor="#ff6d6e71" android:background="#ffeeeeee" android:padding="10dp" android:hint="Password" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Sign in" android:id="@+id/btnSignin" android:layout_centerHorizontal="true" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:textColor="#ff6d6e71" android:layout_marginTop="10dp" android:layout_below="@+id/txtPassword" android:longClickable="false" android:clickable="true" android:background="#fffed4d4" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Forgot your Password ?" android:id="@+id/textForgot" android:layout_below="@+id/btnSignin" android:layout_alignLeft="@+id/btnSignin" android:layout_marginTop="10dp" android:textColor="#ff607d8b" android:textSize="18dp" android:clickable="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Sign Up" android:id="@+id/textSignup" android:layout_alignBottom="@+id/textForgot" android:layout_alignRight="@+id/btnSignin" android:textColor="#ff607d8b" android:textSize="18dp" android:layout_marginTop="10dp" android:clickable="true" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Login with facebook" android:id="@+id/btnLoginfb" android:layout_below="@+id/textForgot" android:layout_centerHorizontal="true" android:layout_marginLeft="30dp" android:layout_marginTop="20dp" android:layout_marginRight="30dp" android:background="#ff2385ff" android:textColor="#ffffffff" android:clickable="true" android:focusableInTouchMode="false" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Help" android:id="@+id/btnLoginhelp" android:layout_below="@+id/btnLoginfb" android:layout_alignLeft="@+id/btnLoginfb" android:layout_marginTop="10dp" android:background="#fffed4d4" android:textColor="#ff6d6e71" android:clickable="true" android:layout_marginBottom="20dp" android:focusableInTouchMode="false" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Skip" android:id="@+id/btnLoginskip" android:background="#fffed4d4" android:textColor="#ff6d6e71" android:layout_alignTop="@+id/btnLoginhelp" android:layout_alignRight="@+id/btnLoginfb" android:clickable="true" android:layout_marginBottom="20dp" android:focusableInTouchMode="false" /> </RelativeLayout> </ScrollView>

$state.go()

  

...

     

选项对象。选项包括:

     
      
  • location - notify - 如果为true,则会更新位置栏中的网址,如果为false则不会。如果是字符串,则必须为“替换”,这将更新网址并替换上一条历史记录。
  •   
  • inherit - go(to, params, options),如果为true,则会从当前网址继承url参数。
  •   
  • relative - {object = $ state。$ current},当使用相对路径(例如'^')进行转换时,定义哪个状态是相对的。
  •   
  • notify - {boolean=true|string=},如果为true,则会广播$ stateChangeStart和$ stateChangeSuccess事件。
  •   
  • reload(v0.2.5) - {boolean=true},如果为true,则强制转换,即使状态或参数没有改变,也就是重新加载相同的状态。它与reloadOnSearch不同,因为当你想在一切都相同时强制重新加载时你会使用它,包括搜索参数。
  •   

所以答案是使用 {boolean=true} ,因为:

  

如果为true,将广播$ stateChangeStart和$ stateChangeSuccess事件。